Tile Kollision...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

relentless92

Betreff: Tile Kollision...

BeitragMo, Aug 31, 2009 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu,
Ich weis, darüber gibts schon elendig viele Themen (wie mir die Boardsuche bewies), doch ich habe trotz der ganzen Tipps nichts auf die Reihe bekommen.

Code: [AUSKLAPPEN]

;AppTitel ----------------------

AppTitle "eJump"                   
Graphics 640,480,TILESIZE,2
SetBuffer BackBuffer()
timer=CreateTimer(60)
SeedRnd MilliSecs()

;Globals -----------------------

Global mapbreite=19
Global maphoehe=14

Global tileset
Global mapfile$
Global x
Global y
Global keintile

Global mannX=20
Global mannY=384
Global mannSpeed=3

Global springen=0
Global sprunghoehe

;CONST -------------------------

Const TILESIZE=32

;Laden -------------------------

tileset = LoadAnimImage("tileset1.png",TILESIZE,TILESIZE,0,18)

;Maskimage ---------------------

MaskImage tileset,255,0,255

;Sonstiges ---------------------

Dim map$(mapbreite,maphoehe) ;Background

mapfile$ = ReadFile("Map.txt") ;Der Level




;Leveldatei auslesen und Wert in Array schreiben

For y = 0 To maphoehe
For x = 0 To mapbreite

wert = ReadByte(mapfile$)

map$(x,y) = wert - 97

Next
Next


;HAUPTSCHLEIFE HAUPTSCHLEIFE HAUPTSCHLEIFE HAUPTSCHLEIFE

Repeat

LevelMalen()
Mann()
Kollisionen()

Flip
Cls
WaitTimer timer
Until KeyHit(1)


;ENDE
;FUNCTIONS

Function LevelMalen()

Color 40,239,246 ;Himmelsfarbe
Rect 0,0,640,480,1 ;Himmel

For x = 0 To mapbreite ;BG Malen
For y = 0 To maphoehe

   Select map$(x,y)
      Case 0 DrawImage (tileset,x*TILESIZE,y*TILESIZE,0)
      Case 1 DrawImage (tileset,x*TILESIZE,y*TILESIZE,1)
      Case 2 DrawImage (tileset,x*TILESIZE,y*TILESIZE,2)
      Case 3 DrawImage (tileset,x*TILESIZE,y*TILESIZE,3)
      Case 4 DrawImage (tileset,x*TILESIZE,y*TILESIZE,4)
      Case 5 DrawImage (tileset,x*TILESIZE,y*TILESIZE,5)
      Case 7 DrawImage (tileset,x*TILESIZE,y*TILESIZE,7)
      Case 8 DrawImage (tileset,x*TILESIZE,y*TILESIZE,8)
      Case 16 DrawImage (tileset,x*TILESIZE,y*TILESIZE,16)
      Case 17 DrawImage (tileset,x*TILESIZE,y*TILESIZE,17)
   End Select 

Next
Next

End Function

;;;;;;;;;;;;;

Function Mann()

DrawImage (tileset,mannX,mannY,6)   ;Mann malen Oberhälfte
DrawImage (tileset,mannX,mannY+TILESIZE,15);Unterhälfte

If KeyDown(205) ;Nach Rechts
mannX=mannX+mannSpeed
   If KeyDown(205) And KeyDown(29) ;Rennen rechts
   mannX=mannX+(mannSpeed+2)
   EndIf
EndIf

If KeyDown(203) ;Nach Links
mannX=mannX-mannSpeed
   If KeyDown(203) And KeyDown(29) ;Rennen links
   mannX=mannX-(mannSpeed+2)
   EndIf
EndIf

   ;Springen
   
   If KeyHit(57) And springen=0 Then
   sprunghoehe=1
   springen=1
   EndIf
   
   If springen=1 Then
   mannY=mannY-6
   sprunghoehe=sprunghoehe+1
   EndIf
   
   If sprunghoehe=20 Then
   springen=3
   sprunghoehe=1
   EndIf
   
   If springen=3 Then
   mannY=mannY+6
   EndIf
   
   If mannY>=408 Then
   springen=0
   EndIf
   ;Gesprungen

End Function

;;;;;;;;;;;;;;

Function Kollisionen()

End Function


"MAP.TXT"

Code: [AUSKLAPPEN]
zzzzzzzzzzzhizzzzzzzzzzzzzzzzzzqrzzzhizzzzzzzzzzzzzzzzz
zqrzzzzzzzzzzzzzzzzzzzzzzhizzzzzzzzzzzzzzzzzzqrzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzddfdzddfdzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzabczzzzzzzzzzabceeeeeeeeeee
eeeeeeeeee

;Diese Zeilenumbrüche existieren eigentlich gar nicht! Habe sie nur wegen dem Forum gemacht.


Und zwar, habe ich mir TuT's zum Thema nebenan abfragen und Kollision überprüfen angeschaut... Also zB. das mit der 3Dimension, allerdings weis ich nicht wo ich die True und False Werte finden/Speichern soll.

Die Sache, noch ein Dim Feld zu erstellen, welche nur 1 oder 0 enthält, bringt mich irgendwie auch nicht weiter, da ich nicht weis, wie ich das alles mit ImagesCollide verabeiten soll.

Sowieso glaube ich, das meine Level-Einlese Funktionen nicht so ganz richtig sind. Aber funktionieren tut alles!

MfG

Tennisball

BeitragMo, Aug 31, 2009 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ImagesCollide musst du da eigentlich nichts machen. Du musst einfach machen:
Code: [AUSKLAPPEN]
TileRechtsNebenan = MapArray(SpielerX+1, SpielerY)

Und beim Bewegen abfragen ob das jeweilige Feld leer ist.

Archangel

BeitragDi, Sep 01, 2009 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
um das obrige zu ergänzen:

INFORMATION ZUM NACHFOLGENDEN:
Code: [AUSKLAPPEN]
Dim map(5,5) kleine map mit einer Größe von 36 Feldern !ACHTUNG! "0" wird mitgezählt, also 0-5 sind 6 Zahlen. 6*6=36

Global px,py; Spielerkoordinaten
Global x,y; Mapkoordinaten
Global tileset=LoadAnimImage("tileset.bmp",32,32,0,2); Lade tileset mit 2 tiles á 32*32 Pixel

Repeat
For x = 0 to 5
     For y = 0 to 5
          DrawImage tileset,x*32,y*32,tile
     Next
Next

If pfeiloben=1 and map(px,py-1) <> tile then py=py-1

Until KeyHit(1)


Erklärung:
Code: [AUSKLAPPEN]
If pfeiloben=1 and map(px,py-1) <> tile then py=py-1

Das ist dann mal eine einfache Steuerung =)
Wenn pfeiloben (die Taste Pfeil hoch^^) gedrückt wird und deiner Figur kein Tile im "Weg" steht dann gehst du nach oben.

Wenn jetzt allerdings:
Code: [AUSKLAPPEN]
map(px,py-1) <> tile

nicht zutrifft dann bewegt sich deine Figur auch nicht nach oben!
 

Kaddy

BeitragDi, Sep 01, 2009 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,
wenn ich das jetzt richtig verstanden habe, dürfte dir einen ausschnitt aus meinen früheren nebenprojekt helfen.

Alle tiles die größer als 2 sind , sind nicht(!) begehbar

BlitzBasic: [AUSKLAPPEN]
;Die Bewegung
;#############################################
If KeyDown(208) Then ; runter #
If map(px,py+1) < 2 Then ; #
py = py + 1; #
; #
move = 1; #
End If; #
End If; #
; #
If KeyDown(key_up) Then ;hoch #
If map(px,py-1) < 2 Then; #
py = py - 1; #
; #
move = 1; #
End If; #
End If; #
; #
If KeyDown(Key_left) Then ;links #
If map(px-1,py) < 2 Then; #
px = px - 1; #
move = 1; #
End If; #
End If; #
; #
If KeyDown(205) Then ;rechts #
If map(px+1,py) < 2 Then; #
px = px + 1; #
move = 1; #
End If; #
End If; #
;#############################################
Bin Aktuell auf der Suche nach einen Programmierer Team, ob Hobby Team oder Firma ist egal. Einfach eine PM an mich schreiben.
Bezahlung verlange ich NATÜRLICH keine Wink

Es gibt 10 arten von Menschen, die einen verstehen das Binärsystem , die anderen nicht SmileSmile

Archangel

BeitragDi, Sep 01, 2009 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein Flasch ... nicht alle tiles die größer sind als 2 sind nicht begehbar!

"<" heißt: KLEINER ALS , und die nächste Zahl ist eine 2.

Also folgt

Wenn Code: [AUSKLAPPEN]
map(px+1,py) < 2
true (wahr) wird dann folgt der Rest!
Also Code: [AUSKLAPPEN]
map(px+1,py) < 2
heißt:
map(px+1,py) kleiner als (ersetzt durch "<") 2 THEN rest
 

Kaddy

BeitragMi, Sep 02, 2009 7:30
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, nur n Tipp fehler
Bin Aktuell auf der Suche nach einen Programmierer Team, ob Hobby Team oder Firma ist egal. Einfach eine PM an mich schreiben.
Bezahlung verlange ich NATÜRLICH keine Wink

Es gibt 10 arten von Menschen, die einen verstehen das Binärsystem , die anderen nicht SmileSmile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group