Problem mit Schuss-Kollision II

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Megamag

Betreff: Problem mit Schuss-Kollision II

BeitragMo, Apr 06, 2009 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mal wieder ^^
Mein Gegner kann nun sterben.
Allerdings gibt es ein "Memory Accsess Violation" bei folgender Zeile:
Code: [AUSKLAPPEN]
   If EntityCollided (e\box,C_PSHOT) Then
       PaintMesh e\mesh,e\wtex
      e\churt=5
      e\hurting=True
   EndIf


Aber nicht einfach so. Genau dann, wenn ich einen Gegner miot einem Schuss getrffen habe,
dieser gerade noch weiß blinkt und währenddessen ein anderer Schuss einen anderen Gegner trifft.
Also man sieht auf dem Bild den weißen Gegner und den Schuss, wie er gerade an der Box vom
Gegner ist.

Hier ist der gesamte "MoveInvaders()" Code:
[code]Function MoveInvaders()
For e.enemy = Each enemy

If e\number=1 Then

;------------------
If e\die=False Then
;------------------


If EntityX(e\mesh)>13 Then
dir=-1
ElseIf EntityX(e\mesh)<-13 Then
dir=1
EndIf

If dir=1 Then ;rechts
If e\yaw<90 e\yaw=e\yaw+1
If e\yaw>-90 Then
MoveEntity e\mesh,0,-.02,0
EndIf
TranslateEntity e\mesh,e\yaw/4400,0,0 ;bewegen
ElseIf dir=-1 ;links
If e\yaw>-90 e\yaw=e\yaw-1
TranslateEntity e\mesh,e\yaw/4400,0,0 ;bewegen
If e\yaw<90 Then
MoveEntity e\mesh,0,-.02,0
EndIf
EndIf

RotateEntity e\mesh,0,0,e\yaw


If e\hurting=True Then
If e\churt>0 Then
e\churt=e\churt-1
Else
e\churt=0
PaintMesh e\mesh,e\tex
e\hurting=False
e\life=e\life-1
EndIf
EndIf

If EntityCollided (e\box,C_PSHOT) Then
PaintMesh e\mesh,e\wtex
e\churt=5
e\hurting=True
EndIf

If e\life<=0 Then
Animate e\mesh,3,.5
e\die=True
FreeEntity e\box
EndIf

;---------
EndIf
;---------

If e\die=True Then
If e\animcount<10 e\alpcount=e\alpcount-0.05
EntityAlpha e\mesh,e\alpcount
e\animcount=e\animcount-0.5
debug=e\animcount
If e\animcount<=0 Then
FreeBrush e\tex
FreeBrush e\wtex
FreeEntity e\mesh
Delete e
EndIf
EndIf

EndIf

Next
End Function[\code]

Ich hoffe, ihr könnt mir nocheinmal helfen.


Juhu, ich habe es hingekriegt!! Das Kommando "MoveInvaders()" musste vor dem Kommando
"MoveBullets()" kommen, da der Schuss bei Kollision mit dem Gegner zerstört wird. Wenn MoveInvaders()
nach dieser Tatsache kommt, dann versucht es auf eine Kollision mit dem Shcuss zuzugreifen, der
gar nicht mehr existiert. Deshalb musste nur die Reihenfolge getauscht werden. Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group