Tilemap kolision

Anfängerfragen zum Programmieren mit PureBasic.
Gn00bi
Beiträge: 22
Registriert: 10.04.2007 16:00

Tilemap kolision

Beitrag von Gn00bi »

hi ich hab mich mal an einem tilemap versucht und dazu ein Beispiel aus dem Forum umgeschrieben. Nun hab ich noch1 großes und 1 kleineres Problem:

1. Bei der Data ist das irgendwie umgekehrt, als es dann dargestellt wird (kleineres)
2. Es wurde zwar schon öfters erklärt, wie man das mit der Kollision macht, ich habs aber leider immer noch nicht verstanden. Könnte mir wer bite nochmal auf meinen Code bezogen, dass erklären, sodass, z.B. man nur auf die 1er Sprites kann

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"Tiletest")

CreateSprite(0,64,64)
  StartDrawing( SpriteOutput(0) )
    Circle(32,32,16, RGB(255, 0, 0))
  StopDrawing()
CreateSprite(1,64,64)
  StartDrawing( SpriteOutput(1) )
    Box(0,0,64,64, RGB(0, 0, 100))
  StopDrawing()
CreateSprite(2,64,64)
  StartDrawing( SpriteOutput(2) )
    Box(0,0,64,64, RGB(0, 0, 200))
  StopDrawing()
  
tReihen = 3 - 1
tSpalten = 5 - 1

Restore Karte

Dim map.l (tReihen, tSpalten)
For pReihen = 0 To tReihen
  For pSpalten = 0 To tSpalten
  
  mapdaten.b
  Read mapdaten
  
   map(pReihen, pSpalten) = mapdaten
    
  Next
Next

Repeat
  ExamineKeyboard()
  StartDrawing( ScreenOutput() )
    DrawText(100,100, Str(offX)+", "+Str(offY) )
  StopDrawing()


  If KeyboardPushed(#PB_Key_Right)
    offX - 2
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    offX + 2
  EndIf
  If KeyboardPushed(#PB_Key_Up)
    offY + 2
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    offY - 2
  EndIf

 
  For pReihen = 0 To tReihen
    For pSpalten = 0 To tSpalten
    
      DisplaySprite( map(pReihen, pSpalten) , offX + (pReihen * 64), offY + (pSpalten * 64) )
    
    Next
  Next
  
  DisplayTransparentSprite(0, 1024/2, 768/2)


  FlipBuffers()
  ClearScreen(0)
  Delay(30)
Until KeyboardReleased(#PB_Key_Escape) 

DataSection

  Karte:
  Data.b 1, 2, 1, 1, 1
  Data.b 2, 1, 2, 1, 1
  Data.b 1, 2, 1, 1, 1

EndDataSection
Edit: benutze v. 4.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du musst schon schaun, wo du x und wo du y einsetzt.
das ist nicht "andersrum", sondern x und y vertauscht.

bei der kollision kannst du dich entscheiden, ob du eher eine pacman-like bewegung willst, oder eine unabhängige.
für pacman genügt eine bewegung in richtung auf eine besetzte tile hin erst garnicht zuzulassen.
für freihe bewegung ist es dann besser, für jede seite des playersprites zu berechnen,
über welcher tile es sich befindet, und dann gegebenenfalls die bewegungsmöglichkeit zu blocken.

> Könnte mir wer bite nochmal auf meinen Code bezogen, dass erklären, sodass, z.B. man nur auf die 1er Sprites kann
nicht um diese stunde.... morgen vielleicht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gn00bi
Beiträge: 22
Registriert: 10.04.2007 16:00

Beitrag von Gn00bi »

Die Bewgung sollte schon frei sein.
und das mit dem x und y vertauscht war mir iwie schon klar, aber wo? Hab da grade sowas wie ne denkblockade :?
Antworten