Seite 1 von 4
Raum bei 2D-spielen
Verfasst: 18.08.2006 20:31
von Rockmaster
Hi Leute!
ich wollte mal ein kleines 2D-Spiel programmieren bei welchem man aus der vogelperspektive guckt und seinen charakter nach oben, unten, rechts und links laufen lassen kann.
Das Problem ist dass das ganze Spielfeld natürlich riesig sein soll.
Mein Problem ist jetzt das der charakter immer in der mitte bleiben soll und dass sich einfach nur das feld verschiebt...
Wie macht man sowas?
kennt jemand ein gutes Tutorial dafür?
Verfasst: 18.08.2006 20:59
von #NULL
wenn ich dich richtig verstehe:
benutzte bei allen map-relevanten Diplay..()-aktionen bei den x/y-parametern eine zusätzliche OffsetX / ..Y variable. dieser kannst du dann in den move-aktionen der spielfigur die aktuellen koordinaten zuweisen.
<edit: oder geht's dir eher um die drehung?>
Verfasst: 18.08.2006 22:03
von Rockmaster
Nene das Feld soll sich nicht drehen!
Die X und Y-werte der Spielfigur sollen auch immer gleich bleiben.
Nur wenn man z.B. nach rechts geht soll sich das Spielfeld um eine festgelegte weite nach links verschieben...
Auf diese Weise soll halt die Spielfigur sich durch die Welt bewegen.
Verfasst: 18.08.2006 22:43
von STARGÅTE
Rockmaster hat geschrieben:Nene das Feld soll sich nicht drehen!
Die X und Y-werte der Spielfigur sollen auch immer gleich bleiben.
Nur wenn man z.B. nach rechts geht soll sich das Spielfeld um eine festgelegte weite nach links verschieben...
Auf diese Weise soll halt die Spielfigur sich durch die Welt bewegen.
na wenn die Spielfigur x = x + 10 machen würde, dann muss doch das feld einfach nur x = x - 10 machen und die Figur bleibt bei einer Konstanten
Verfasst: 19.08.2006 10:13
von #NULL
z.b. so
Code: Alles auswählen
;...
If KeyboardReleased(#PB_Key_Right)
mapOffsetX-32
EndIf
;...
For k=0 To mapWidth
For i=0 To mapHeight
DisplaySprite( map(k,i), mapOffsetX+i*32, mapOffsetY+k*32)
Next
Next
;...
Verfasst: 19.08.2006 11:07
von Vermilion
Verfasst: 19.08.2006 12:27
von Rockmaster
So in etwa...
Mein Problem ist einfach dass das Feld viel größer ist als der Bildschirm selbst und das macht die Probleme bei der darstellung...
Naja jedenfalls danke an euch alle!
Bin jetzt ein gutes stück weiter!
Verfasst: 19.08.2006 13:52
von #NULL
mit feld meinst du wohl die map, und nicht die tiles(?), das macht aber eigentlich nichts. bei displaySprite(..) ect. kannst du auch negative werte benutzen (wird geclippt).
Verfasst: 19.08.2006 14:11
von #NULL
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"fllscrn")
CreateSprite(0,64,64)
StartDrawing( SpriteOutput(0) )
Circle(32,32,16,$ff0000)
StopDrawing()
CreateSprite(1,64,64)
StartDrawing( SpriteOutput(1) )
Box(2,2,60,60,$aa3333)
StopDrawing()
CreateSprite(2,64,64)
StartDrawing( SpriteOutput(2) )
Box(2,2,60,60,$aa6666)
StopDrawing()
w=40-1
Dim map.l(w,w)
For i=0 To w
For k=0 To w
map(i,k)=Random(1)+1
Next
Next
Repeat
ExamineKeyboard()
StartDrawing( ScreenOutput() )
;DrawText(100,100, Str(MouseDeltaX())+", "+Str(MouseDeltaY()) )
;Circle(MouseX(),MouseY(),5,$770000)
StopDrawing()
If KeyboardPushed(#PB_Key_Right)
offX-64
EndIf
If KeyboardPushed(#PB_Key_Left)
offX+64
EndIf
If KeyboardPushed(#PB_Key_Up)
offY+64
EndIf
If KeyboardPushed(#PB_Key_Down)
offY-64
EndIf
For i=0 To w
For k=0 To w
DisplaySprite( map(i,k), offX+i*64, offY+k*64)
Next
Next
DisplayTransparentSprite(0, 64*7,64*6)
FlipBuffers()
ClearScreen(0)
Delay(30)
Until KeyboardReleased(#PB_Key_Escape)
für isometrie wär's natürlich komplizierter
Verfasst: 19.08.2006 18:14
von Rockmaster
Ja genau das meine ich!
Das Objekt soll sich Feld für feld weiter bewegen!
jetzt komme ich schon klar damit danke!!!