Problem mit Schuss Objekt Kollision!!!
Verfasst: 13.11.2005 21:06
also mein problem ist, dass die koordinaten des schusses irgendwie nicht erkannt können werden und desshalb der schuss einfach durch den 2ten spieler hindruch geht. Ich poste mal den ganzen code:
wenn ich jetz vom 1 spieler aus auf den 2ten schiesse passiert einfach nix!!! plz helft mir ich schnalls voll nicht mehr!! folgender teil und die linked lists stellen das hauptproblem dar :
Code: Alles auswählen
InitSprite()
InitKeyboard()
;-------------Strukturen--------------------------------------
Structure schuss
x.l
y.l
speedx.l
speedy.l
graphic.l
EndStructure
NewList schuss.schuss()
Structure punkt
armor.l
x.l
y.l
EndStructure
NewList punkt.punkt()
Structure spieler1
xp1.l
yp1.l
leben1.l
EndStructure
NewList spieler1.spieler1()
Structure spieler2
x.l
y.l
leben2.l
EndStructure
NewList spieler2.spieler2()
;-------------------------------------------------------------
;-------------Prozeduren--------------------------------------
Procedure Collision(x.f, y.f)
Result = 0
Restore Map
For my=0 To 30
For mx=0 To 40
a.b
Read a
If a = 1
If SpriteCollision(2, Int(x), Int(y), 1, mx*25, my*25)
Result = 1
Break 2
EndIf
EndIf
If a = 4
If SpriteCollision(2, Int(x), Int(y), 4, mx*25, my*25)
Result = 1
Break 2
EndIf
EndIf
Next
Next
ProcedureReturn Result
EndProcedure
;---------------------------------------------------------------
;------------------------Konstanten-----------------------------
#links1 = 0
#rechts1 = 1
#auf1 = 2
#ab1 = 3
#links2 = 0
#rechts2 = 1
#auf2 = 2
#ab2 = 3
#Speed1 = 3
#Speed2 = 5
#Speed3 = 5
#Speed4 = 5
;---------------------------------------------------------------
OpenScreen(1024, 768, 32, "Test")
LoadSprite(1,"GFX\wand3.bmp",0)
LoadSprite(2,"GFX\spieler1.bmp",0)
TransparentSpriteColor(2,255,255,255)
LoadSprite(3,"GFX\hintergrund.bmp")
LoadSprite(4,"GFX\wand4.bmp")
LoadSprite(5,"GFX\blaster.bmp")
TransparentSpriteColor(5,255,255,255)
LoadSprite(6,"GFX\punkt.bmp")
TransparentSpriteColor(6,255,255,255)
LoadSprite(7,"GFX\spieler2.bmp",0)
Global g.l
Global speed.l
xp1=300
yp1=100
x=600
y=400
armor=100
g=10
speed=10
SetFrameRate(50)
Repeat
DisplaySprite(3,0,0)
ExamineKeyboard()
ForEach spieler2()
ForEach schuss()
If SpriteCollision(5, schuss()\x, schuss()\y, 7, spieler2()\x, spieler2()\y)
Quit=1
EndIf
Next
Next
ForEach schuss()
schuss()\x = schuss()\x + schuss()\speedx
schuss()\y = schuss()\y + schuss()\speedy
DisplaySprite(schuss()\graphic, schuss()\x, schuss()\y)
Next schuss()
;------------------------Bewegung------------------------------------
;########################Spieler1####################################
If KeyboardPushed(#PB_Key_Up)
Richtung=#auf1
If Collision(xp1, yp1-5) = 0
yp1 - #Speed1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
Richtung=#ab1
If Collision(xp1, yp1+5) = 0
yp1+#Speed1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
Richtung=#links1
If Collision(xp1-5, yp1) = 0
xp1 - #Speed1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
Richtung=#rechts1
If Collision(xp1+5, yp1) = 0
xp1 + #Speed1
EndIf
EndIf
;###################################################################
;#####################Spieler2######################################
If KeyboardPushed(#PB_Key_W)
Richtung=#auf2
If Collision(x, y+5) = 0
y - #Speed2
EndIf
EndIf
If KeyboardPushed(#PB_Key_S)
Richtung=#ab2
If Collision(x, y+5) = 0
y + #Speed2
EndIf
EndIf
If KeyboardPushed(#PB_Key_A)
Richtung=#links2
If Collision(x-5, y) = 0
x - #Speed2
EndIf
EndIf
If KeyboardPushed(#PB_Key_D)
Richtung=#rechts2
If Collision(x+5, y) = 0
x + #Speed2
EndIf
EndIf
;##################################################################
;--------------------------------------------------------------------
;-----------------------schiessen-------------------------------------
If KeyboardPushed(#PB_Key_Space)
If space = 0
space = 1
Select Richtung
Case #auf1
AddElement(schuss())
schuss()\x = xp1+12
schuss()\y = yp1
schuss()\speedy = -5
schuss()\speedx = 0
schuss()\graphic = 5
Case #ab1
AddElement(schuss())
schuss()\x = xp1+12
schuss()\y = yp1
schuss()\speedy = 5
schuss()\speedx = 0
schuss()\graphic = 5
Case #links1
AddElement(schuss())
schuss()\x = xp1
schuss()\y = yp1+12
schuss()\speedy = 0
schuss()\speedx = -5
schuss()\graphic = 5
Case #rechts1
AddElement(schuss())
schuss()\x = xp1
schuss()\y = yp1+12
schuss()\speedy = 0
schuss()\speedx = 5
schuss()\graphic = 5
EndSelect
EndIf
Else
space = 0
EndIf
;-----------------------------------------------------------------------------
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
Restore Map
For my=0 To 30
For mx=0 To 40
a.b
Read a
If a = 1
DisplaySprite(1, mx*25, my*25)
EndIf
If a = 4
DisplaySprite(4, mx*25, my*25)
EndIf
If a = 6
DisplaySprite(6, mx*25, my*25)
EndIf
Next
Next
DisplayTransparentSprite(2,xp1,yp1)
DisplayTransparentSprite(7,x,y)
FlipBuffers()
Until Quit = 1
End
DataSection
Map:
Data.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.b 1,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4,1
Data.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
EndDataSection
Code: Alles auswählen
ForEach spieler2()
ForEach schuss()
If SpriteCollision(5, schuss()\x, schuss()\y, 7, spieler2()\x, spieler2()\y)
Quit=1
EndIf
Next
Next