[B3D] EntityParent nach einer Kollision ins Entity gedrückt!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: [B3D] EntityParent nach einer Kollision ins Entity gedrückt!

BeitragMi, Jan 18, 2006 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Alle, habe mal wieder ein kleines Problem. Bin dabei ein Spiel zu proggen und will für mein Raumschiff drei Eckpunkte per EntityRadius als Kollisionsabfrage machen. Die Positionen der Kollisionspunkte mache ich per EntityParent. Leider wird nach einer Kollision das Parent nach einer Kollision in das Entity eingedrückt! Und dieses will ich vermeiden. Wie geht das ohne das ich immer wieder das Parent neu (mit Cos/Sin) berechnet positionieren muß?

Hier mal ein kleines testprogramm welches das Problem veranschaulichen soll.Code: [AUSKLAPPEN]
Graphics3D 400,400,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,0,-5

light=CreateLight()
RotateEntity light,0,30,0

;Boden
cube=CreateCube()
PositionEntity cube,0,-3,0
ScaleEntity cube,2,2,2
EntityType cube,2

;Schiff
schiff=CreateSprite()
sphere=CreateSphere()
ScaleSprite schiff,.3,.3
ScaleEntity sphere,.2,.2,.2
PositionEntity sphere,0,-.4,0
EntityRadius sphere,.2
EntityParent sphere,schiff
EntityType sphere,1

ypa#=0
yp#=5
yg#=0




While Not KeyHit(1)
 yg=yg-0.001
 ypa=yp
 yp=yp+yg
 PositionEntity schiff,0,yp,0

 Collisions 1,2,2,2
 UpdateWorld

 If CountCollisions(sphere)>0 Then
  yp=ypa
  yg=-yg/2
 End If

 RenderWorld
 Flip
Wend
End

preachie

BeitragMi, Jan 18, 2006 2:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi hectic,

wenn ich das richtig verstehe, ist das Schiff der Parent von der Sphere, welche auf Kollisionen überprüft wird.
Doch bewegen tust Du das Schiff, das sich natürlich weiter nach unten bewegt, da keine Kollisionsabfrage dies verhindert.

Ich habe einmal die Eltern-Kind-Beziehung ausgetauscht und statt des Schiffs die Sphere bewegt und erhalte so dann ein korrektes Ergebnis.

Also folgender Code:

Code: [AUSKLAPPEN]
Graphics3D 400,400,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,0,-5

light=CreateLight()
RotateEntity light,0,30,0

;Boden
cube=CreateCube()
PositionEntity cube,0,-3,0
ScaleEntity cube,2,2,2
EntityType cube,2

;Schiff
schiff=CreateSprite()
sphere=CreateSphere()
ScaleSprite schiff,.3,.3
ScaleEntity sphere,.2,.2,.2
PositionEntity sphere,0,-.4,0
EntityRadius sphere,.2
EntityParent schiff,sphere
EntityType sphere,1

ypa#=0
yp#=5
yg#=0




While Not KeyHit(1)
 yg=yg-0.001
 ypa=yp
 yp=yp+yg
 PositionEntity sphere,0,yp,0

 Collisions 1,2,2,2
 UpdateWorld

 If CountCollisions(sphere)>0 Then
  yp=ypa
  yg=-yg/2
 End If

 RenderWorld
 Flip
Wend
End


Wobei ich ehrlich gesagt noch nicht ganz genau das Problem bzw. den Anwendungsfall verstanden habe Wink

Vielleicht hilft es ja trotzdem irgendwie weiter Wink

Gruß
Preachie

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Jan 18, 2006 2:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi preachie, daß Problem ist, daß mein Raumschiff 3 dieser EntityRadius-Kollisionsabfragen hat. Ich kann also nicht den EntityRadius als Parent nehmen, da dann die anderen beiden garnicht mehr richtig funzen würden. Im Spiel ist die Sphere natürlich mit einem Triangle und Alpha=0 dargestellt, um nicht unnötig Recourcen zu verschwenden.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group