Seite 1 von 1

Problem mit Schuss Objekt Kollision!!!

Verfasst: 13.11.2005 21:06
von seggl
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:

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 
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

ForEach spieler2()

ForEach schuss()
If SpriteCollision(5, schuss()\x, schuss()\y, 7, spieler2()\x, spieler2()\y)
Quit=1
EndIf

Next
Next 

Verfasst: 13.11.2005 21:13
von Kaeru Gaman
äh.. hallo?

das hab ich doch schon mal gelesen, aber da gabs auch schon kommentare dazu...