Sprung auf Balken
Übersicht

wishmasterBetreff: Sprung auf Balken |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
bin gerade am Programmieren eines Jump n Run Spieles und habe ein Problem mit dem Sprung auf einen Balken. Momentan springt die Hauptfigur durch den Balken, als ob dieser nicht existiert. Wäre dankbar, wenn mir jemand erklären könnte, was ich falsch gemacht habe. Mfg Wishmaster Code: [AUSKLAPPEN] Global balken=LoadImage("Gfx\balken.bmp")
MaskImage balken,255,0,255 MidHandle balken Type balken Field x Field y End Type Code: [AUSKLAPPEN] Dim map (20,15) .mapdata Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0 Data 0,0,2,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0 Data 0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0 Data 1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Function Zeichne_Map() ; map Restore mapdata For y = 0 To 14 For x = 0 To 19 Read map(x,y) If map(x,y) = 1 Then balken1.balken=New balken balken1\x=x*32 balken1\y=y*32 DrawImage balken, balken1\x, balken1\y EndIf Next Next End Function ; ende map [code] Function Sprung () ; sprung If KeyHit(57) And sprung=1 Then chn=PlaySound(sound1) sprung=0 For i=-30 To 30 y_figur#=y_figur#+d_y d_y=(-0.111)*i^2+100 y_figur#=y_figur#-d_y Zeichne_Map() Zeichne_Figur() Bewegung() Schuss1() Zaehler() Muenze() Gegner2() Leben() Gegner1() If i=30 Then GoDown() EndIf For balken1.balken=Each balken If ImagesCollide(figur_r,x_figur,y_figur,0,balken,balken1\x,balken1\y,0) And i> 0 Then godown = 0 sprung = 1 Exit EndIf If ImagesCollide(figur_l,x_figur,y_figur,0,balken,balken1\x,balken1\y,0) And i> 0 Then godown = 0 sprung = 1 Exit EndIf If ImagesCollide(figur_r,x_figur,y_figur,0,balken,balken1\x,balken1\y,0) And i< 0 Then Exit GoDown() EndIf If ImagesCollide(figur_r,x_figur,y_figur,0,balken,balken1\x,balken1\y,0) And i< 0 Then Exit GoDown() EndIf Next Flip Cls Next Else d_y=0 EndIf End Function |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, also erstmal würde ich Dim-Felder nicht mit Types mischen. Für eine solche 2D-Map ist das alleinige nutzen von einem Dim-Feld wohl besser. Types kannst du dann später immernoch für Schüsse etc. machen.
Ich nehme an, dass später noch weitere Werte ins Data-Feld kommen? Dann kannst du das folgendermassen machen. Code: [AUSKLAPPEN] Dim tiles(AnzahlKachelmuster)
tiles(1)=LoadImage("Gfx\balken.bmp") tiles(2)=LoadImage("Gfx\baum.bmp") ... For y = 0 To 14 For x = 0 To 19 If map(x,y) > 0 Then DrawImage tiles(map(x,y)),x,y EndIf Next Next ![]() ![]() ![]() Um dich jetzt nicht auf die Folter su spannen, hier mal zwei kleine Beispiele: Grobe Bewegung mit Cursor Code: [AUSKLAPPEN] ;Grafik setzen
Graphics 320,320,32,2 SetBuffer BackBuffer() ;Variablen festlegen Dim xy%(29,29) ;Spielfeld mit 30^2 Tiles xp%=10 ;Start-X-Position im Spielfeld yp%=10 ;Start-Y-Position im Spielfeld ;ZufallsTiles For y=0 To 29 For x=0 To 29 xy(x,y)=Rand(0,255) Next Next ;Hauptroutine While Not KeyHit(1) ;Tastaturabfrage If KeyHit(203) Then xp=xp-1:If xp<0 Then xp=0 If KeyHit(205) Then xp=xp+1:If xp>20 Then xp=20 If KeyHit(200) Then yp=yp-1:If yp<0 Then yp=0 If KeyHit(208) Then yp=yp+1:If yp>20 Then yp=20 ;Tiles For y=1 To 8 For x=1 To 8 Color xy(xp+x,yp+y),0,0 Rect x*32,y*32,32,32,1 Next Next Flip Wend End Feine Bewegung mit der Maus Code: [AUSKLAPPEN] ;Grafik setzen
Graphics 320,320,0,2 SetBuffer BackBuffer() ;Variablen festlegen Dim xy%(99,99) ;Spielfeldspeicher mit 100*100 Tiles xp#=1000 ;X-Position im Spielfeld yp#=1000 ;Y-Position im Spielfeld dvx%=0 ;X-Faktor für Tileverschiebung dvy%=0 ;Y-Faktor für Tileverschiebung tpx%=0 ;X-Faktor für Dim-Tilesprung tpy%=0 ;Y-Faktor für Dim-Tilesprung mx#=0 ;X-Position Maus my#=0 ;Y-Position Maus ;Felder For y=0 To 99 For x=0 To 99 If Rand(0,10)>8 Then xy(x,y)=Rand(1,6) Next Next ;Rahmen For q=0 To 99 xy(0,q)=6 xy(q,0)=6 xy(99,q)=6 xy(q,99)=6 Next ;Hauptroutine While Not KeyHit(1) ;Rechne mx=MouseX() my=MouseY() xp=xp-(160-mx)/20 yp=yp-(160-my)/20 If xp<0 Then xp=0 If yp<0 Then yp=0 If xp>2943 Then xp=2943 If yp>2943 Then yp=2943 dvx=xp Mod 32 dvy=yp Mod 32 tpx=Floor(xp/32) tpy=Floor(yp/32) ;Tiles For y=0 To 8 For x=0 To 8 Color xy(x+tpx,y+tpy)*32,0,0 Rect 32+x*32-dvx,32+y*32-dvy,32,32,1 Next Next ;Info Color 255,255,255 Rect 32,32,256,256,0 Text 0,0,xp Text 0,16,yp Flip Cls Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
wishmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke hectic für die schnelle Antwort!
Die 2 kleinen Beispiele habe ich mal angeschaut, glaube aber nicht, dass ich so etwas in meinem Spiel brauche, da mein Spielfeld immer an der gleichen Stelle bleibt. Den Balken habe ich ohne Types gemacht und jetzt funktioniert der Imagecollide Befehl, ausserdem läuft das Spiel wieder viel flüssiger. Das Problem ist jetzt aber, dass die Figur den Sprung nicht genau an der Balkengrenze abbricht, sondern unterschiedlich weit in den Balken springt, bevor der Sprung abgebrochen wird. Eigentlich wollte ich noch einen Imagecollide Befehl machen, bei dem i grösser als 0 ist( die Figur befindet sich im 2ten Teil des Sprunges) und der Balken ein bisschen weiter unten ist. Wenn es jetzt zu einer Kollision kommt, weiss der PC, dass die Figur von der Seite an den Balken springt und die Figur geht dann ohne seitliche Bewegung nach unten. Ich habe noch Pics gemacht: Hier sieht man was passiert, wenn man von der Seite an den Balken springt http://www.cghost.de/mediahost/img1/1F1Pc.JPG So sollte es eigentlich sein. Der rote Balken ist der leicht nach unten versetzte Balken: http://www.cghost.de/mediahost/img7/2Opj6.JPG |
||
Beatenvoy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kollisionsimages?
_ | P | --- Also die Sachen über, unter und neben "P" sind Kollisionsbilder, und wenn nun das rechte Bild eine Mauer oder der gleichen trifft dann If Image berührt Wand then X = X - Speed endif Ganz einfach, und die bildchen kannst du ja vor dem Mapzeichen Laden! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group