Kollision, wenn Objektradien sich schon überschneiden

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

horstböhse

Betreff: Kollision, wenn Objektradien sich schon überschneiden

BeitragDi, Dez 20, 2005 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!!

Ich habe mal wieder ein Problem mit der B3D-Kollision!!

Und zwar können in meinem Game vom Spieler gesteuerte Gleiter Geschosse abfeuern.
Dies habe ich so realisiert, dass ich das Geschoss beim Tastendruck neu erstelle und vor dem Gleiter positioniere.

Die Kollisionsprüfung dieser Geschosse mit den anderen Gleitern erfolgt durch die B3D-Kollisionsprüfung.

Das funktioniert so weit auch richtig, es gibt da nur ein Problem:

Sollten sich 2 Gleiter unmittelbar nebeneinander befinden, überschneiden sich nach einem Schuss der Kollisionsradius des 2. Gleiters schon mit dem des Geschosses, so das B3D keine Kollision erkennt, obwohl das Geschoss anschließend durch den Gleiter durchflieg!!

Auch, wenn ich das Geschoss mit Translateentity() an seine Anfangsposition schiebe, ist dies so.

Hat jemand eine Idee, wie ich erreichen kann, dass B3D dies trotzdem als Kollsion erkennt?

Danke schonmal und hier der Code:

BlitzBasic: [AUSKLAPPEN]

Function Phaser_Schuss(schuetze.spielerliste, ausbaustufe)

If((Framecount - schuetze\Schussframe) > (0.1 * framerate))

schuetze\Schussframe = Framecount

;Neuen Phaser erzeugen
p.phaser = New phaser
p\ausbaustufe = ausbaustufe
p\schuetze = schuetze

p\entity = CopyEntity(Phaser_Bild)

EntityRadius(p\entity,0.5)
EntityType(p\entity,3)

PositionEntity(p\entity,schuetze\x , schuetze\y , Z_Gleiter+0.001)
TranslateEntity(p\entity,- 1.5 * schuetze\radius * Sin(schuetze\winkel), 1.5 * schuetze\radius * Cos(schuetze\winkel),0)

RotateEntity(p\entity,0,0,schuetze\winkel)
ShowEntity(p\entity)

p\vx = -120.0 / framerate * Sin(schuetze\winkel)
p\vy = 120.0 / framerate * Cos(schuetze\winkel)



End If

End Function


Daniel

Black Spider

BeitragMi, Dez 21, 2005 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab zwar nicht genau kapiert warum es zu deinem Problem gekommen ist, und was es genau war,
doch warum machst du´s dir nicht einfacher ? Ich hatte das problem noch nicht...
BlitzBasic: [AUSKLAPPEN]
;PhotonenKugel
Function feuerfrei()
p.photontype = New photontype
p\obj = CopyEntity(Photon, Schiff)

EntityParent Photon,0
EmitSound LF,p\obj
p\lebzeit = Photondauer#
End Function


Function Update()
For p.photonType = Each photonType
MoveEntity p\obj,0,0,100
RotateSprite p\obj,Rnd(310)
If CountCollisions(p\obj) Then
If EntityCollided(p\obj, TYPE_TERRAIN) Then
EmitSound Explo, p\obj
Explosion ( p )
FreeEntity p\obj
Delete p
Return
End If
End If
Next
End Function


vll. hilfts ja.
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
 

horstböhse

BeitragFr, Dez 23, 2005 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal!!

Das hilft mir leider nicht weiter!! Im Prinzip mache ich das ja wie du, nur mit CollisionEntity und nicht mit EntityCollided!!

Du erstellst das Geschoss ja, wenn ich das richtig sehe, in der Mitte des Schuetzen!! Ich erstelle es vor dem Schuetzen, und es gibt immer dann Probleme, wenn das Geschoss schon in ein anderes Objekt hineinerstellt wird (wenn sich der Schütze genau davor befindet).
Dann nämlich erkennt BB das nicht als Kollision und CountCollisions ist 0!
Die Folge: Das Geschoss fliegt durch das Objekt hindurch!

Kann mir keine helfen? Crying or Very sad

Plasma(alt)

Betreff: hier sind fast nur kerle

BeitragFr, Dez 23, 2005 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
(siehe deinen letzen satz Twisted Evil )

ich habs mal so gemacht

abschussschiff hiden
bullet scalen auf schiffbreite *2
colli testen
abschussschiff showen

oder bullet mit einem großen unsichtbaren object verküpfen (parent)
und dann unsichtbares object testen

Wink
DIV is dead !

Shodan

BeitragDi, Dez 27, 2005 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Entweder du fragst die Collision der Gleiter untereinander ab und setzt die Collisiosradien so gross, dass sie sich nicht zu nahe kommen können.
Oder du überprüfst die Entfernung zw Geschoss und Gleiter mit Entity distance, für den Fall das die Entfernugn zw den Gleitern zu klein ist.
www.selfmadegames.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group