Problem mit Map-scrolling

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Macintosh

Betreff: Problem mit Map-scrolling

BeitragMi, Nov 10, 2010 23:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey. Irgendwie komm ich grad absolut nicht drasuf :( dabei ist es eig. ganz einfach, nur funktiniert meine idee nicht so wie ich will.

Ich habe ein 2D Jump'n'Run.
Und ich möchte das die map "weich" scrollt, sobalt meine spielfigur x-position >= hälfte des Bildschirms ist.
Also die Figur bleibt auf der X-achse stehen, nur die map scrollt.
So. nun will die map aber absolut nicht "weich" scrollen. mein versuch:

glWidth = graphicsWidth()
glHeight = graphicsHeight()
playerX = player x position
BlitzMax: [AUSKLAPPEN]

For Local x:Int = scrollX To scrollX + glWidth / tileSize -1
For Local y:Int = scrolly To scrollY + glHeight / tileSize -1
DrawImage world_image, ((x - scrollX ) * tileSize) - (playerX Mod tileSize), y * tileSize - (scrollY * tilesize), world[x, y]
Next
Next


(playerX mod tileSize) <- da stimmt doch was nicht :( aber was?
Die Tiles fahren, spricngen dann aber immer zackig zurück, sobald playerX mod tileSize = tilesize ist. :(

Hoffe man versteht was ich meine
Danke

Lastmayday

BeitragDo, Nov 11, 2010 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

damit deine map weich scrollt brauchst du noch eine cammera variable die sich immer zum spieler hinbewegen will, diese kannst dann begrenzen.

codebeispiel:

BlitzMax: [AUSKLAPPEN]
SuperStrict
Graphics(1024, 768)

Const camerasmooth:Float = 20.0
Global camx:Float

Global playerx:Float, playery:Float
'mitte des bildschirms bestimmen
Global screenmittex:Int = 1024 / 2, screenmittey:Int = 768 / 2

While Not (KeyHit(KEY_1) Or AppTerminate())
Cls
'debug
SetColor(255, 255, 255)
DrawRect(screenmittex, 100, 1, 100)
SetColor(255, 255, 0)
DrawRect(screenmittex + (camx / 30.0), 150, 4, 4)
SetColor(255, 0, 0)
DrawRect(screenmittex + (playerx / 30.0), 150, 4, 4)

'simuliert die spieler bewegung
playerx = (MouseX() - screenmittex) * 3

'die camera distanz zwischen player duch 20.0 teilen (camerasmooth) dadurch folgt die camera dem spieler
camx:+(playerx - camx) / camerasmooth

'camera begrenzen
If camx < 0 Then camx = 0

'die camera durch die tilesize teilen
Local tileverschiebung:Int = camx / 32

SetColor(255, 255, 255)
For Local y:Int = -5 To 5
'und bei x alls ausrichtung nehmen
For Local x:Int = -10 + tileverschiebung To 10 + tileverschiebung
DrawRect(screenmittex + (x * 32) - camx, screenmittey + (y * 32), 24, 24)
Next
Next

SetColor(255, 0, 0)
DrawRect(screenmittex + playerx - camx, screenmittey + playery, 24, 24)

Flip(1)
Wend
End
 

Macintosh

BeitragDo, Nov 11, 2010 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
jo. Danke

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group