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
ICh glaube, Rockmaster meint soetwas wie in diesem Topic:
http://www.purebasic.fr/german/viewtopi ... d&start=20

(http://www.christian-gleinser.de/prog/isodemo.zip von PBZecke)

Oder?

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