[Monkey] Zoomen in einer 2D umgebung

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

kog

Betreff: Zoomen in einer 2D umgebung

BeitragMo, März 16, 2015 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Zusammen

Ich komme immer wieder zu dem Problem, das Zoomen zu Probleme in meinen Spielen führt.
Diese äussern sich darin, das zwischen den einzelnen Tiles 1px Rand entsteht.

Jetzt wollte ich mal fragen, wie löst ihr Zoomen in Top Down 2D Spielen?

Grüsse
kog


user posted image
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

Dottakopf

BeitragMo, März 16, 2015 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Juhu Advance wars Smile

Also da du keinen Code gepostet hast würde ich ganz naiv sagen
Code: [AUSKLAPPEN]




PushMatrix()
Scale ScaleX,ScaleY

ZeichneSichbareTiles(ScaledDeviceWidth,ScaledDeviceHeight,Pseudo..)

PopMatrix()



Alternativ sollte es Igintion mit OnBoard haben. War für 30€ mehr bei Monkey dabei.
http://www.playniax.com/ bzw. Store : http://www.monkey-x.com/Store/_index_.php

Bestimmt kann dir jemand helfen wenn du deine Scalierung zeigst.
Denke auch das da bei den Float Berechnung einige ungünstige werte rauskommen.
Rechtschreibfehler gelten der allgemeinen Belustigung!

kog

BeitragMo, März 16, 2015 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Dottakopf

Danke dir für deine Hilfe Wink
Naja ich habe Monkey schon so lange, da gabs das Bundle noch nicht Sad
Am Zoomen an sich scheitert es nicht, jedoch an einem Smooth Zoom in und Out,
sobald werte von nicht power of two erreicht werden, entstehen diese unschönen Linien. Dieses Problem kann man häufig im Internet finden.

Ich versuchte schon float werte Ceil, Floor und Runden. Sogar Padding bei den Tiles.


Daher Fragte ich so in die Runde, wie das andere Lösen problemlos?
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

Dottakopf

BeitragMo, März 16, 2015 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm ich weiß das ist jetzt eine unschöne Lösung, aber warum Prüfst du die Float werte nicht einfach ob diese Power of Two erreichen. Hm hm.. denke das gibt dann einen bissi ruckligen Effekt und wäre nicht sonderbar Smooth. Aber Advance Wars hat sich ja auch nicht durch eine tolle Zoom Funktion so toll entwickelt Smile
Ist ja deine Entwicklung aber ich persönlich würde es nicht sonderbar störend finden wenn es 3 feste zoom Sufen geben würde,Lupe+ Lupe -. (Denke das wäre sogar ergonischer in der Bedienung)


Da ich das Problem auch "irgendwan" mal haben könnte, wäre es toll wenn ein deutlich Erfahrener als ich zu dem Thema äußern würde.

Sorry.

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

kog

BeitragMo, März 16, 2015 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir werden uns wohl auch dazu entschliessen, nur einen harten Zoom zu basteln.
Ohne weichen Übergang, dann entsteht das problem nicht, ist aber halt nicht so schön.
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel
 

#Reaper

Newsposter

BeitragDi, März 17, 2015 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe weder mit Tiles noch mit Monkey wirklich jemals richtig gearbeitet, hatte dieses Problem also noch nicht. Aber das Problem trat hier ja, afaik, schon öfters auf.
Könnte sein, dass meine Idee deiner mit Padding entspricht, aber trotzdem: Meine Idee wäre, und das war sie von anderen glaube ich zuvor auch schon so oder so ähnlich, die Tiles etwas größer zu zeichnen als das Grid. Sagen wir mal z.B. um den Faktor 0.1 oder eher weniger, und eben direkt abhängig um Zoomgrad. Das müsste man dann vermutlich auch z.B: nur machen, solange zwischen festen Zoomstufen gewechselt wird.

Ansonsten: Das Ganze liegt ja offensichtlich an den Floats. Soweit ich mich erinnere verwendet Monkey für die Zeichenbefehle ebenfalls überall Floats und keine Ints. Schon mal geschaut, ob du irgendwo da irgendwo einen Int vergessen hast?

Grüße,
#Reaper
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

DAK

BeitragDi, März 17, 2015 9:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem entsteht ja deswegen, weil der Skalierungswert mal der Tile-Größe keine ganze Zahl erreicht. Was du machen kannst, ist den Skalierungswert so wählen, dass es sich auf eine ganze Zahl ausgeht.

Code: [AUSKLAPPEN]
skalierteGröße = alterSkalierungswert*tileGröße
skalierteGröße = Round(skalierteGröße)
neuerSkalierungswert = skalierteGröße/tileGröße


Das einfach vor dem Zeichnen laufen lassen und alles sollte gefixt sein.
Gewinner der 6. und der 68. BlitzCodeCompo

kog

BeitragDi, März 17, 2015 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo DAK

Ich glaube du bist seit Jahren der erste, welcher mir auf diese Frage eine vernünftige Antwort geben kann.
Im Internet habe ich immer davon gelesen, das es an Float Positionen liegt, nie aber das auch der Skalierungsfaktor des Bildes ein Problem geben kann.

Jedoch klingt es eigentlich auch Logisch, das so was das Problem hervorrufen kann.

DANKE DANKE DANKE!

Hier zum Testen:
http://kognetwork.ch/war/test/MonkeyGame.html

Key UP / DOWN


Ein Problem welches ich seit Jahren hatte ist nun gelöst Very Happy YAY
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel
  • Zuletzt bearbeitet von kog am Di, März 17, 2015 12:25, insgesamt einmal bearbeitet

DAK

BeitragDi, März 17, 2015 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Sache^^ Bin froh zu helfen Wink
Gewinner der 6. und der 68. BlitzCodeCompo

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, März 17, 2015 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wurde beispielsweise hier behandelt. Sogar auf Monkey. Diese Lösung hätte zumindest den Vorteil, dass durch Aufrundungen kein "zappeliges" Zoomen zustande kommt. Es kann also ganz smooth gezoomt werden. Nachteil ist natürlich, dass die Tiles dann umstrukturiert werden müssten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

kog

BeitragDi, März 17, 2015 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hi hectic

Ich versuchte die Methode von damals, jedoch ohne grossen Erfolg, unter IE z.b. gab es immer noch komische Linien.

Jedoch mit der Lösung von DAK nun bin ich vollkommen zufrieden und funktioniert so wie es soll .. Smile
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

DAK

BeitragMi, März 18, 2015 8:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kanns auch generell so machen, dass man nicht den prozentuellen Zoomwert als Grundwert nimmt, sondern die Breite eines Tiles. Wenn man zoomt, wird somit einfach die Breite des Tiles (als Integer) verringert / erhöht. Aus diesem Wert berechnet man sich dann (wie oben) den Zoomwert. Gleiches Ergebnis, kein bisschen ruckelig.

@Hectic: Ruckeln würde es wohl auch mit meiner originalen Lösung nicht, da die Rundung das Ergebnis um <0.5 Pixel verändert. <0.5 Pixel ist zu klein um angezeigt zu werden, das heißt, Ruckeln gibt es da eh nicht. Einzig, wenn die Zoomgröße so weit runter geht, dass ein Tile eine Größe von vllt 2-3 Pixel hat, dann würde es hald eher plötzlich zoomen, aber da müsste man hald den Zoom passend abregeln.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group