[Monkey] [Android] Bildschirmauflösung und Helligkeit
Übersicht Andere Programmiersprachen Allgemein
nX^Betreff: [Android] Bildschirmauflösung und Helligkeit |
Fr, Feb 07, 2014 11:24 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 07, 2014 12:34 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 07, 2014 13:09 Antworten mit Zitat |
|
---|---|---|
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^ |
Fr, Feb 07, 2014 13:31 Antworten mit Zitat |
|
---|---|---|
Scale ist die flasche Wahl, da nur die Grafiken skalliert werden aber nicht die Auflösung... VirtualDisplay funktioniert super
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 |
Fr, Feb 07, 2014 14:18 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 07, 2014 14:38 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 07, 2014 19:55 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 07, 2014 20:43 Antworten mit Zitat |
|
---|---|---|
Exaktere Input-Werte erhältst Du wenn Du sie Dir von InvTransform() berechnen läßt. | ||
nX^ |
Sa, Feb 08, 2014 12:02 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Feb 08, 2014 12:32 Antworten mit Zitat |
|
---|---|---|
@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 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 |
So, Feb 09, 2014 11:21 Antworten mit Zitat |
|
---|---|---|
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 |
Übersicht Andere Programmiersprachen Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group