[Monkey] [Android] Bildschirmauflösung und Helligkeit

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

nX^

Betreff: [Android] Bildschirmauflösung und Helligkeit

BeitragFr, Feb 07, 2014 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gehe ich eigentlich mit dem Problem um, dass die verschiedenen Androidgeräte verschiedene Auflösungen haben? Skalliere ich alle Bilder die ich habe auf eine einheitliche Größe oder ändere ich die Bildschirmauflösung auf eine einheitliche Größe per Scale?

Gibt es eine Möglichkeit mit Monkey die Bildschirmhelligkeit zu ändern oder muss ich da auf Java zurückgreifen?

Farbfinsternis

BeitragFr, Feb 07, 2014 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hole Dir zuerst die Device-Auflösung
Code: [AUSKLAPPEN]

width:Int = DeviceWidth()
height:Int = DeviceHeight()

Jetzt legst Du fest in welcher Auflösung Dein Spiel maximal angezeigt werden soll, ich wähle hier meistens Full-HD. Damit kannst Du eine Ratio berechnen:
Code: [AUSKLAPPEN]

ratioX:Float = Float(width) / 1920.0
ratioY:Float = Float(height) / 1080.0

Mit dieser Ratio und Matrix-Operationen kannst Du Deine gesamte Grafik für das Zielgerät skalieren ohne Dich nochmal darum kümmern zu müssen:
Code: [AUSKLAPPEN]

Method OnRender:Int()
    PushMatrix()
    Scale(ratioX, ratioY)

    ' Deine Grafikausgabe

    PopMatrix()

    Return 0
End


Bei der Bildschirmhelligkeit bietet Dir Monkey (meines Wissens nach) nichts an was Dir helfen könnte.

DAK

BeitragFr, Feb 07, 2014 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Für die Helligkeit wirst du dir noch was eigenes in Java schreiben müssen.

Auf der anderen Seite würde ich dir (sofern du vor hast, das in einem Spiel zu verwenden, welches auch andere Leute spielen sollen) empfehlen, von solchen Sachen die Finger zu lassen.
Der User weiß üblicherweise selbst, wie hell er seinen Bildschirm haben will, vor allem, weil ein bestimmtes Helligkeitslevel auf jedem Handy anders hell sein kann. Außerdem weißt du ja nicht, ob der User deine App unter voller Mittagssonne oder des Nächtens im Bett verwendet.
Wenn du mit solchen Einstellungen herumpfuscht landet deine App üblicherweise recht schnell wieder im Mist.

Hast du vor irgendeine Art System-Tool zu bauen, mit dem man Einstellungen am Handy verändern kann, dann ist Monkey sowieso die falsche Wahl, da du dir für jede Kleinigkeit eigene Java-Funktionen schreiben dürftest. Da wäre es wesentlich einfacher direkt Java zu verwenden.
Gewinner der 6. und der 68. BlitzCodeCompo

nX^

BeitragFr, Feb 07, 2014 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Scale ist die flasche Wahl, da nur die Grafiken skalliert werden aber nicht die Auflösung... VirtualDisplay funktioniert super Smile

Ich habe nur vor einen Moment die Helligkeit zu ändern, nicht dauerhaft...

Gibt es eine Möglichkeit von Monkey aus die Benutzersprache des Endgerätes herauszufinden?
So in der Art wie man das Target abfragen kann... (#if TARGET="android")

Farbfinsternis

BeitragFr, Feb 07, 2014 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
nX^ hat Folgendes geschrieben:
[...]Gibt es eine Möglichkeit von Monkey aus die Benutzersprache des Endgerätes herauszufinden?
So in der Art wie man das Target abfragen kann... (#if TARGET="android")


Code: [AUSKLAPPEN]

Extern
#If TARGET="android"
   Function getLanguage:String() = "Locale.getDefault().getLanguage"
#EndIf

DAK

BeitragFr, Feb 07, 2014 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
nX^ hat Folgendes geschrieben:
Ich habe nur vor einen Moment die Helligkeit zu ändern, nicht dauerhaft...


Wofür genau willst du das verwenden?
Wäre es eventuell besser möglich, dünklere Farben am Bildschirm zu verwenden, statt die Beleuchtung zu verändern?
Gewinner der 6. und der 68. BlitzCodeCompo

Midimaster

BeitragFr, Feb 07, 2014 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mache es mit der Auflösungsunabhängigkeit genauso wie Farbfinsternis. Allerdings nehme ich immer 600x1000 als "meine Auflösung". Alle Bilder male ich dann immer für diese Displaygröße.

Ich stelle auch gleich im OnRender() die Skalierung um und kann dann immer so arbeiten als hätte ich 600x1000.

Die Touchwerte berechne ich direkt in im OnUpdate() einfach umgekehrt und nutze sie im weiteren Code ausschließlich über MausX und MausY:

Code: [AUSKLAPPEN]
Global MausX%, MausY%
....
OnUpdate%()
     MausX=TouchX()/ScaleX
     MausY=TouchY()/ScaleY
     .....
End


dafür braucht man kein Fremd-Modul....
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Farbfinsternis

BeitragFr, Feb 07, 2014 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Exaktere Input-Werte erhältst Du wenn Du sie Dir von InvTransform() berechnen läßt.

nX^

BeitragSa, Feb 08, 2014 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten. Hab aber noch eine Frage ^^
Ich benutze Angelfont. Gibt es noch andere Möglichkeiten? Weil man die Schriftgröße bei Angelfont ja nur per scale ändern kann, wenn ich das richtig sehe.
 

PhillipK

BeitragSa, Feb 08, 2014 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@Alle:

Warum nutzt ihr eine Fixe auflösung, auf die ihr euer Spiel programmiert?
Meines erachtens ist es sinnvoller, wenn man auf diverse Aspect Ratios programmiert und anhand von fixpunkten (zb eine standart kachelgröße die man nutzt) ein allgemeines Scaling zu errechnen.
Läuft im prinzip sehr ähnlich raus, aber:

Wenn ich mir zb
Code: [AUSKLAPPEN]

ratioX:Float = Float(width) / 1920.0
ratioY:Float = Float(height) / 1080.0

angucke, dann passiert bei 5:3, 4:3 oder anderem nur schmarn. Die bilder werden auf einer achse weiter gestreckt bzw gestaucht, was unschöne nebenwirkungen hat.

Mal aus dem -nicht ganz wachen- kopf heraus:

Code: [AUSKLAPPEN]

ratio:Float = Min(Float(width) / 1920.0,Float(height) / 1080.0)

SetScale(ratio,ratio)


Nunja, auch wieder ansichtssache (und target-sache. In html5 kann man ja leicht die anzeigegröße des Canvas manipulieren).

@nX^:

Ich kenne Angelfont nicht, allerdings kannst du anhand eines "scalings" schon recht einfach die größen anpassen.
Wichtig ist, das du weißt, wie groß ein Buchstabe auf Scaling 1 zb ist. (notfalls: Screenshot, paint, pixelzählen)
Diesen wert definierst du dir als konstante und arbeitest dann mit dem dreisatz:

Code: [AUSKLAPPEN]
Const anglefont_size:int = 12 'pixelzahl bei scale 1
Const anglefont_fac:float = 1.0 / angelfont_size 'ein factor zum errechnen.

Local scale:Float = anglefont_fac * 50 '50 ist die wunsch-höhe.

Falls größe 1 nicht darstellbar ist, kannst du auch jeden anderen wert nehmen (2.0, 10.0 13.37), solange du den faktor dann anpasst Smile
Einzige vorraussetzung: Angelfont scale verwendet keine eigene ansicht von scaling. *grübel*

(hey, ich muss mir angelfont echt mal anschauen. JEDER nutzt das und ich popel mir immernoch meine eigenen Bitmapfonts zurecht oO)

Midimaster

BeitragSo, Feb 09, 2014 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst in Angelfont jeden beliebigen Font in beliebiger Größe laden. Dazu musst Du mit dem mitgelieferten Tool einen neuen *.fnt Font in ein *.png-Bild und eine *.txt Datei umwandeln. Beides verwendest du anschließend in deinem Code.

Im Original-Angelfont wird beispielsweise der Verdana.png und das Verdana.txt mitgeliefert.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group