Seite 1 von 1

probleme mit der kollision

Verfasst: 13.10.2005 17:30
von seggl
hallo zusammen
ich habe es mit mit der suchfunktion schon versutcht aber nichtsgefunden, das mir hätte helfen können. folgendes habe ich versucht:

Code: Alles auswählen


Structure punkt
armor.l
x.l
y.l
EndStructure
NewList punkt.punkt()

Structure schuss  
  sx.l                   
  sy.l
  speedx.l
  speedy.l
  absspeed.l
  graphic.l
EndStructure
NewList schuss.schuss()  

armor=100

LoadSprite(5,"GFX\schuss.bmp")
TransparentSpriteColor(5,255,255,255) 
LoadSprite(6,"GFX\punkt.bmp")
TransparentSpriteColor(6,255,255,255)

ForEach punkt() 
 ForEach schuss()
    If SpriteCollision(5, Int(x), Int(y), 6, Int(x), Int(y))
      punkt()\armor - 20
      DeleteElement(schuss())
       If armor < 0
DeleteElement(punkt())
EndIf
    EndIf
  Next
 Next
der schuss geht einfach durch den punkt hindurch und fliegt weiter?? ich möchte eigentlich, dass der schuss gelöscht wird wenn er aufprallt, eine explosion erscheint und nach 5 schüssen der punkt gelöscht wird.

Verfasst: 13.10.2005 18:26
von spacewalker
Ich denke weil SpriteCollision() - check nicht ganz richtig ist:
die ersten x und y koordinaten sollten vom ersten sprite sein, die anderen beide von dem zweiten. Sonst wird in dem kode dem punkt kein armor abgezogen, es muesste

Code: Alles auswählen

punkt()\armor = punkt()\armor - 20 
heissen
und weiter unten eher

Code: Alles auswählen

       If punkt()\armor < 0 
          DeleteElement(punkt()) 
        EndIf
ich hoffe ich hab dir helfen koennen

Verfasst: 14.10.2005 10:15
von seggl
mann das funzt immer noch nicht!!

Verfasst: 14.10.2005 12:57
von Zaphod
ohne deine sprites ist es zwar nur zu erraten, aber wenn deine sprites sehr klein sind und dein schuß sich pro frame mehr pixel bewegt als die sprites in diese richtung groß sind kann es passieren, dass der schuß über dein sprite springt ohne es berührt zu haben. mach deinen schuß mal ganz langsam, so 1 pixel pro frame. kommt es dann immernochnicht zur kollision, hat es daran nicht gelegen. :D

Verfasst: 14.10.2005 13:32
von Hellhound66
Spacewalker hat zwar schon beschrieben, aber hier nochmal deutlich:

Code: Alles auswählen

    If SpriteCollision(5, Int(x), Int(y), 6, Int(x), Int(y)) 
kann nicht funktionieren, da die Variablen x und y 0 sind. Was du meinst ist sicherlich das:

Code: Alles auswählen

If SpriteCollision(5, Int(schuss()\x), Int(schuss()\y), 6, Int(punkt()\x), Int(punkt()\y)) 

Verfasst: 14.10.2005 18:28
von spacewalker
Poste mal den ganzen Code, man kann wirklich recht wenig mit den auszuegen anfangen. Vielleicht liegt das problem ja ganz woanders ?
Wenn du meinst,er waere zu gross oder es mehrere include-dateien gibt, poste als zip oder so - man kann echt nur dann richtig helfen wenn man selbst das problem einkreisen kann.