Pygame: Problem mit scrollbarer Tilemap

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Sephiroth
User
Beiträge: 28
Registriert: Freitag 3. November 2006, 00:12

Pygame: Problem mit scrollbarer Tilemap

Beitragvon Sephiroth » Donnerstag 24. Juli 2008, 16:29

Hallo!
Erstmal nicht verwundern, wenn die Antwort von The Hit-Man nicht ganz zum Thema passt. Hab den ganzen Thread editiert, da ich das Thema etwas abgeändert hab und ich nciht noch einen neuen Thread eröffnen wollte.

Also, ich programmiere grade ein kleines Jump 'n run game mit python(+pygame).
Klappte auch alles wunderbar in meinen ersten Testläufen. Doch dann habe ich das scrollen in die Tilemap integriert. (Hab mich zum großteil an dieses Tutorial gehalten. Auch wenns in C++ geschrieben ist.)

Zuerst werde ich kurz die Funktionsweise erläutern, und dann was am Ende schief läuft.

1) Meine Tilemap wird durch ein 2d array dargestellt.
Und meine methode zum füllen des Bildschirms sieht etwa so aus:
Also: scroll_y und scroll_x ist die Spielerposition - die Hälfte des Bildschirms(um herauszufinden, bei welcher Position die linke obere Ecke des Bildschirms sein muss)
Und 320 ist die Screen Breite und 240 die Höhe des Screens.

Code: Alles auswählen

for y in range(0-(scroll_y%TILESIZE),240+TILESIZE,TILESIZE):
    for x in range(0-(scroll_x%TILESIZE),320+TILESIZE,TILESIZE):
            self.mapImage.blit(self.tiles[self.mapArray[(x+scroll_x)/TILESIZE][(y+scroll_y)/TILESIZE]].get_gfx(),(x,y))
   


-Bewegen tu ich meine Spielfigur pixelweise und nicht Tileweise..
-In meiner Methode, die sich um die Kollisionsabfrage der Spielfigur mit der Map(Also ob begehbar oder nicht) arbeitet einfahc mit den SPielerkoordinaten, die ja eigentlich World koordinaten sein müssten, und damit völlig unbeeinflusst von den scrollkoordinaten. Oder seh ich da was falsch?

Auf jedenfall scheint es so bei mir nicht zu funktinieren.

Starte ich das SPiel, startet meine SPielfigur ziemlich in der linken oberen Ecke. Hier wird noch nciht gescrollt und alles funktiniert wunderbar. laufe ich aber über die Bildschirmmitte hinaus(Ab hier wird gescrollt, da die Spielfigur immer mittig im Bildschirm sein soll) ist alles etwas verschoben.
Lassse ich mir die Koordinaten des Spielers und die Scrollkoordinaten ausgeben, fällt auf, dass der SPieler immer genau um diese Scrollkoordinaten falsch steht.
Das sieht dann so aus:
Bild
Wie wir sehen, steht die Spielfigur genau um diese 9px(Also genau dem Wertder scroll_y) zu tief.(oder der Hintergrund zu hoch??)

Deshalb meine Frage: erkennt ihr in dem was ich geschrieben habe irgendwo einen Denkfehler?..
Oder erkennt vllt ein pythonkundiger einen fehler in meinem Code?..
Weiß auf jedenfall nicht mehr weiter..


Hier der gesammte code..zum download

Falls noch jemand irgendwelche zusätzlichen erläuterungen oder sonst was, steh ich gerne für Rückfragen zur Verfügung:)

greetings[/code]
Zuletzt geändert von Sephiroth am Dienstag 29. Juli 2008, 03:34, insgesamt 5-mal geändert.
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Freitag 25. Juli 2008, 10:52

Du mußt doch für jede berechnete Position Deiner Schleife, neu blitten, denke ich. Also alles neu auf das HauptSurface kopieren. Allerdings weiß ich nicht genau, wie es aussieht. Könnte sein, das es nicht smooth genug ist. Ähm, hatte mich ne Zeit mit SDL/Allegro beschäftigt. Da mußte man noch irgendwelche Frames berechnen, damit man zum richtigen Zeitpunkt blittert, sonst ruckelt es. Nen V-Blank hatte leider auch nichts gebracht. Die C-64er Zeiten, hatte mir damals besser gefallen. Einfach auf den Rasterstrahl warten und gut ist ;)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder