[SDL] Scrolling
-
Hi,
ich habe vor kurzer Zeit mit der SDL angefangen und möchte jetzt mal ein bisschen die Möglichkeiten erproben.
Dafür habe ich mir gedacht, scrolle ich einfach mal den Bildschirmausschnitt in alle Richtungen (ich habe natürlich mit den Grundlagen angefangen
). Also ähnlich wie in Strategiespielen einmal mit der Tastatur und einmal mit der Maus (also ich bewege die Maus zum Bildschirmrand und dann scrollt die Kammera in die Richtung!).
Wichtig ist mir dabei nur, dass sich nicht nur das Hintergrundbild bewegt, sondern die Kammera - ich hoffe ihr versteht was ich meine. Es ist für mich mitlerweile kein Problem mehr, Bilder über den Bildschirm zu bewegen, allerdings möchte ich halt nicht alle gerendert Bilder bewegen.Ich hoffe ihr versteht was ich meine und ich stelle mich jetzt nicht total blöd an!
Ich habe auch schon nach einem Tutorial dafür gesucht, allerdings erklärt der Autor das darin nur anhand eines Spiels und erstellt vorher irgendwelche Funktionen, die er dann hinterher verwendet - mir wäre allerdings reiner Quellcode der sich nur damit beschäftigt lieber
.Danke im Voraus!
-
einfach ausrechnen: du erhälst die "bildschirm-koordinaten" deiner objekte indem du sie mit deinen "welt-koordinaten" der objekte subtrahierst (welche du natürlich irgendwo speicherst, üblicherweise hast du ja eh irgendeine klasse dafür).
als beispiel: dein fenster hat die dimensionen 800x600, dein objekt hat eine absolute weltposition von 400,300 und das linke obere eck deiner kamera ist bei 200,100.
dann hast du [obj.x] - [kamera.x] = 200
und [obj.y] - [kamera.y] = 100auf deinem bildschirm wird das objekt dann bei 200,100 angezeigt, was ja auch korrekt ist.
-
Ok, danke erstmal.
Dein Beispiel ist mit SDL_Rect ja realisierbar. Allerdings verstehe ich nicht ganz, wie mir das bei meinem Problem weiterhelfen soll. Angenommen ich habe ein "Map" (also der Einfachheitshalber einfach ein .jpeg Bild), die 2000*2000 Pixel groß ist. Mein Bildschirmausschnitt beträgt 800*600 Pixel. Wenn ich jetzt mit der Maus an den rechten Bildschirmrand gehe, könnte ich ja einfach die Map nach links scrollen lassen... hat aber wahrscheinlich den Nachteil, dass ich später mit mehreren Objekten auf der Map, alle Objekte verschieben muss und ich denke das kostet viel Systemleistung.
Wie schaffe ich es also, die Kammera über die "Map" (irgendwann später vllt mein Spielfeld) wandern zu lassen?
Gruß
-
geht leider nicht anders. zumindest bei SDL musst du alle objekte verschieben, da es (wenn du ohne opengl arbeitest) keinen viewport oder vergleichbares gibt. ist aber auch nicht so schwer umzusetzen.
du kannst es verschiedenartig lösen, z.B. mit einer View oder Camera-Klasse, die du mit dem Singleton-Pattern implementierst. Dann kannst du von deinen anderen Klassen (Sprite / Drawable oder sowas) immer die Position der Kamera abfragen und die Position der Objekte dementsprechend ändern.
Das sind dementsprechend nicht mehr als ein paar einfache Rechenaufgaben für jedes Objekt, und das benötigt kaum Zeit, ist also sehr, sehr schnell.
-
Ah ok, dann werde ich das wohl so umsetzen müssen.
Ansonsten erkundige ich mich nochmal was ein Viewport überhaupt ist und versuch dass ganze mal ein bisschen anzuwenden.Danke für die schnellen Antworten!