Probleme mit Kollision

Anfängerfragen zum Programmieren mit PureBasic.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

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.
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.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

in ShowLand()

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) )
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

Code: Alles auswählen

For t=0 To mapHeight
z.b. sowas verwendnen:

Code: Alles auswählen

For t=tmin To tmax
..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
my pb stuff..
Bild..jedenfalls war das mal so.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Danke für schnelle Antwort, werde es dieses Wochenende austesten und Bescheid geben.

Gruss obar
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

hier nochmal als code:

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
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.
:D
my pb stuff..
Bild..jedenfalls war das mal so.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Hab's erst jetzt gesehen. Klappt super. <)
Antworten