Raum bei 2D-spielen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Raum bei 2D-spielen

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

Beitrag 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?>
my pb stuff..
Bild..jedenfalls war das mal so.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
;...
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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?
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

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

Beitrag 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).
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Beitrag von Rockmaster »

Ja genau das meine ich!
Das Objekt soll sich Feld für feld weiter bewegen!
jetzt komme ich schon klar damit danke!!!
Antworten