hallo Felix,
jetzt ist mir das klar geworden. Bei jedem Schritt muss ich auch die Position (sprich Koordinaten) der Elemente anpassen, alles klar.
ähm... nein. Nur die Koordinaten der Elemente, die sich selbst innerhalb der Welt bewegen (wie z.B. der Avatar). Alle anderen Elemente verbleiben "an Ort und Stelle" und werden automatisch mitgescrollt.
Hmmm, moment. Du gehts ja davon aus, dass es ein Browsergame wird. Ich möchte aber doch eine Desktop-Anwendung mit Python und OpenGL machen (zumindest hatte ich das bis gerade eben kurz vor der Antwort an Deus F. noch vor). Das Konzept mit dem Scrollen und dem Layer (Maske) wird es da so nicht geben...
Es wäre vermutlich sehr sinnvoll, zuerst die Koordinaten eines jeden Objektes abzufragen, um zu Testen, ob das Element überhaupt im Viewport liegt, bevor man es auf den Canvas zeichnet, oder?
Nein! Alle Elemente werden in die Welt gesetzt, und dort sind sie dann. Der Viewport "fährt" über die Karte und zeigt den passenden Ausschnitt. Je nachdem welches Element wo in der Welt gerade ist, kann man es dann im Ausschnitt sehen, oder eben nicht.
Hm, wie gesagt, dieser Ansatz scheint mir für JavaScript bzw. HTML gültig zu sein. Allerdings bin ich mir jetzt nicht mehr sicher.
» »» Sonst müsste man ja immer alle Objekte der Welt bewegen, obwohl diese gar nicht sichtbar sind?
Bewegen muss man nur, was sich von seiner Stelle weg bewegt. Und wenn Deine Gegenstände in Deiner Welt "stehen", dann bewegt sich nur der Ausschnitt über sie hinweg, falls man den Avatar bewegt.
Klar.
Sollten sich aber "Bewohner" in der Welt bewegen, dann musst Du sie tatsächlich bewegen, aber völlig unabhängig vom gegenwärtigen Ausschnitt der Karte!
Ok, ja, na ja, Wesen wird es erstmal nicht geben vermutlich :)
Ich werde mich mal an die Arbeit machen, und versuchen, dein Beispiel nachzubauen, bzw. in Python nachzuprogrammieren. Der Ablauf ist mir nun klar, auch Splinters Tip mit der Verwaltung der Gegenstände ist mir hier sehr hilfreich.
Für die Interaktion des Avatars mit seiner Umwelt musst Du tatsächlich noch eine "Kollisionserkennung" basteln. Das geht mit den Koordinaten der jeweiligen Objekte (in meinem Beispiel bekommt das <img>-Elementobjekt eine Eigenschaft "pos", in der die X- und Y-Koordinaten innerhalb der Welt gespeichert sind) und ihren Abmessungen (offsetWidth/offsetHeight). Du wirst sicherlich Bilder verwenden, um die Dinge in Deiner Welt darzustellen. Dazu benötigst Du sicherlich <img>-Elemente, und die haben Abmessungen, die man zusammen mit den (natürlich selbst gespeicherten) Koordinaten verrechnen kann.
Wozu willst Du Python verwenden, wenn das Ganze im Browser ablaufen soll?
siehe oben
Grüße
Kleinbonum