probleme mit der kollision

Anfängerfragen zum Programmieren mit PureBasic.
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

probleme mit der kollision

Beitrag 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.
Benutzeravatar
spacewalker
Beiträge: 48
Registriert: 15.07.2005 15:22
Wohnort: Stuttgart

Beitrag 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
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

Beitrag von seggl »

mann das funzt immer noch nicht!!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag 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)) 
Optimismus ist ein Mangel an Information.
Benutzeravatar
spacewalker
Beiträge: 48
Registriert: 15.07.2005 15:22
Wohnort: Stuttgart

Beitrag 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.
Antworten