[Monkey] Auflösungen und Scalierung

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Auflösungen und Scalierung

BeitragMi, Jan 28, 2015 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blitzer und Monkeys Smile


ich würde gerne eine Worte zu den verschiednen(?) herangehensweisen zum "Auflösungsunabhängigen" proggen verlieren. Gerne genauer zum Android Target.

Wie scalliert Ihr die Grafiken für die verschiedenen Auflösungen der Devices ? Mit den Matrix befehlen oder scalliert Ihr die Grafiken wirklich passend zu den Auflösungen ? Was gibts da performance technisch zu beachten.

Ich habe bereits gelesen das es sinnvoll ist die Grafiken für Full HD zu erstellen und dann um einen gewissen faktor zu scallieren. Wie würde das als Code form aussehen? oder Manipuliert ihr gleich die ganze Matrix ?

Ich poste im Beginners Corner, also bedenkt das ich praktisch 0 erfahrung explizit mit diesem Thema habe Wink

Fertige Lösungen will ich jetzt nicht aber welche Befehle sinnvoll und schnell in der Praxis wären, würde ich mir schon kurz von Leuten mit Erfahrung erklären lassen.

Ja.. hm lasst euch aus Smile

Danke Danke !

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

DAK

BeitragMi, Jan 28, 2015 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Monkey hab ich noch nie verwendet, aber Java/Android. Was man dort macht, ist dass man eine Art Mipmap (nur in gröberen Stufen) macht, wo man das Bild für verschiedene Auflösungen grob vorskaliert. Diese Bilder erzeugt man z.B. mit Gimp, wo es schöne Skalierungsalgos gibt, wo man z.B. selbst wählen kann, ob man Linear, Kubisch oder Nearest Neighbor verwendet. So hat man dann Bilder für niedrige, mittlere, hohe, sehr hohe und abartige Auflösungen. Im Programm wählt man (bzw. wählt das Android SDK für einen) das Bild, welches sich am nächsten zur Auflösung des Geräts befindet, und skaliert von dort den Rest. So kriegt man noch immer sehr schön skalierte Bilder, kann aber absolut jede Auflösung bedienen, auch wenn man für genau diese Auflösung kein Bild hat.

Die Matrix manipulieren klingt hier nach dem passenden Weg alles zu skalieren.
Gewinner der 6. und der 68. BlitzCodeCompo

Midimaster

BeitragDo, Jan 29, 2015 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ich mache es mit Skalierung. Innerhalb des Spieles arbeite ich immer mit der festen Auflösung von z.B. 500x300pix. Im OnRender() wird mit Scale die Darstellung auf das reale Display skaliert. Die realen Mausdaten rechne ich umgekehrt in meine 500x300 Auflösung zurück.

Beispiel:
Code: [AUSKLAPPEN]
Strict
Import mojo


Class Game Extends App

   Global   ScaleX#, ScaleY#, MausX%,MausY%
   
   Method OnCreate%()
      SetUpdateRate 60
      ScaleX=DeviceWidth()/500.0
      ScaleY=DeviceHeight()/300.0
      Return 0
   End   


   Method OnUpdate%()
      If KeyHit(KEY_ESCAPE) OnBack()
      EchteMaus
      Return 0
   End   


   Method EchteMaus:Void()
      MausY=(TouchY()/ScaleY)
      MausX=(TouchX()/ScaleX)
   End


   Method OnRender%()
      Scale ScaleX,ScaleY
      Cls 255,255,0
      SetColor 255,0,0
      DrawRect 4,4,490,290
      SetColor 255,255,0
      DrawRect 6,6,486,286
      SetColor 255,255,255
      DrawText "X=" + MausX + "   Y=" + MausY,200,130
      Return 0
   End   
   
   
   Method OnBack%()
      EndApp()
      Return 0
   End   
End


Function Main%()
   New Game
   Return 0
End
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Dottakopf

BeitragDo, Jan 29, 2015 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey danke für eure tolle Hilfe!

die Grafiken in verschiedenen Grundauflösungen zu erstellen und am besten(Idialfall) mit faktor 0 zu skallieren gefällt mich schon.. ohne das ich es probiert habe.

Somit könnte man doch auch in der OnCreate die Grafiken laden, Skallieren und erneut in einem Neuen Handle speichern. Oder geht das nicht so wie ich mir das vorstelle.(Framesets..)

Die Lösung von Midimaster erscheint mir logisch und relativ einfach, Danke !
wenn ich Grafiken scalliere bekomme ich dann als Return die Scallierten grafiken Größen oder immer nur die der Original Datei ?

Meine sorge ist das ich mit Gui elementen Probleme bekommen könnte, aber ich denke das werde ich merken sobald ich etwas herumspiele. Ich denke wenn ich statt HtML das GFL Target wähle kann ich auch ich auch leicht verschiedene Auflösungen simulieren ?

Ja erstmal danke Smile
Rechtschreibfehler gelten der allgemeinen Belustigung!

DAK

BeitragDo, Jan 29, 2015 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf den meisten Targets (allen, die über die Graka rendern und nicht über die CPU) wirst du quasi keine Geschwindigkeitsvorteile durch das Vorskalieren kriegen. Auf der Grafikkarte kostet sowas quasi gar nichts.
Gewinner der 6. und der 68. BlitzCodeCompo

Dottakopf

BeitragMi, Feb 04, 2015 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wollte mich nochmal bedanken, hatte jetzt mal zeit etwas herumzuspielen und habe mich jetzt dafür entschieden mit einer internen Auflösung von 1280x720 zu arbeiten.

ab HTC ONe Mini und ab Samsung Galaxy S3 sind das die kleinsten Auflösungen. Mein Gedanke ist eine 1zu1 Skallierung ist Idial und eine Scallierung auf Full HD sieht auch noch gut aus.
Toll finde ich das auch die Offset Positionierung der Bilder zur neuen Auflösung passt. Razz

Zum Code habe ich mit den Matrix befehlen gearbeitet..
Gibt dazu ein tolles Youtube Beispiel https://www.youtube.com/watch?v=wpIxkUfXPNg
Code: [AUSKLAPPEN]


   Method OnCreate()
      SetUpdateRate(60)
      
      DeviceScaleX = (DeviceWidth() / 1280.0)
      DeviceScaleY = (DeviceHeight() / 720.0)
   End

......
...

   Method OnRender()
      Cls(128, 128, 128)

     PushMatrix()

      Scale DeviceScaleX, DeviceScaleY

      DrawImage(imgX, 320, 240, frameX)
      DrawImage(imgY, 280, 650, frameY)

     PopMatrix()
      
      DrawText "Scalex: " + DeviceScaleX, 0, 0
      DrawText "Scaley: " + DeviceScaleY, 0, 20

...
Rechtschreibfehler gelten der allgemeinen Belustigung!

Midimaster

BeitragMo, Feb 09, 2015 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch das HTML Target mit einer vorher genauestgelegten Auflösung starten. Dazu änderst Du nachdem das Projekt mind. einmal bereits in HTML erstellt worden ist diese Datei in den build-Ordnern deines Projektes:

Zitat:
...
<body>

<canvas id="GameCanvas" width=640 height=480 tabindex=1></canvas><br>

<textarea id="GameConsole" style="width:640px;height:240px;border:0;padding:0;margin:0" readonly></textarea><br>
...


Einfach die Werte width und height anpassen
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group