Ich muss gestehen, dass ich den map-offset noch nicht ganz begriffen habe. Auch diese Aussage hab ich nicht ganz begriffen 'start- und end-punkte für die map-loop variabel machen und immer berechnen'. Ich wäre froh, wenn mir dass irgendjemand erklären könnte.mapX/Y ist jetzt aber was anderes ( =pixel-wert für den map-offset). außerdem wird die ganze map gezeichnet, musst du also noch start- und end-punkte für die map-loop variabel machen und immer berechnen.
Probleme mit Kollision
in ShowLand()
momentan wird die gesamte map gezeichnet (auch außerhalb des screens), und es wird die ganze map versetzt dargestellt ('mapX + ..' bzw 'mapY + ..') jenachdem wo sich der player befindet.
wenn es aus performancegünden oder spaß nötig wird das anzeigen der map auf den sichtbaren bereich einzuschränken, dann kann man statt z.b. sowas verwendnen:..und tmin/tmax berechnest du vor der schleife (noch besser direkt beim bewegen des players / der map), so dass z.b. 'tmin' eine tile-breite oberhalb des screen ist, und tmax eine breite unterhalb.
..analog für n
Code: Alles auswählen
For t=0 To mapHeight
For n=0 To mapWidth
DisplaySprite(map(n,t)\TileID, (mapX + #TileSize*n),(mapY + #TileSize*t) )
wenn es aus performancegünden oder spaß nötig wird das anzeigen der map auf den sichtbaren bereich einzuschränken, dann kann man statt
Code: Alles auswählen
For t=0 To mapHeight
Code: Alles auswählen
For t=tmin To tmax
..analog für n
hier nochmal als code:die "2+" und "-4+" jeweils am anfang sollen nur den bereich enger machen, damit du besser siehst was passiert. die kannst du dann weglassen oder noch anpassen, so dass die grenzen gerade außerhalb des screens liegen.

Code: Alles auswählen
tmin = 2+ (-mapY) /#TileSize :: If tmin<0 : tmin=0 : EndIf
tmax = -4+ (-mapY+#ResY)/#TileSize :: If tmax>mapHeight : tmax=mapHeight : EndIf
nmin = 2+ (-mapX) /#TileSize :: If nmin<0 : nmin=0 : EndIf
nmax = -4+ (-mapX+#ResX)/#TileSize :: If nmax>mapWidth : nmax=mapWidth : EndIf
For t=tmin To tmax
For n=nmin To nmax
