Ball Physik / seltsames Kollisionsverhalten

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Gast

Betreff: Ball Physik / seltsames Kollisionsverhalten

BeitragDo, Jan 29, 2004 17:26
Antworten mit Zitat
Hallo erstmal!

Ich probiere seit einigen Tagen mit Blitz3D etwas einfache Ballphysik zu erstellen. Allerdings bin ich dabei auf ein seltsames Problem gestoßen.

Die folgenden Codezeilen sollen den Ball in einem angegebenen Winkel und mit einer angegebenen Geschwindigkeit steigen lassen. Gleichzeitig wirkt aber auf die Geschwindigkeitskomponente der Y-Achse die festgelegte Gravitation ein, so dass yvel ins negative fällt und der Ball wieder "runterkommt". Dies tut er auch, aber nur insofern sämtliche Kollisionsangaben herausgenommen wurden. Andernfalls fällt der Ball bis zur Oberfläche des Kollisionsobjektes und fängt dann unverständlicherweise trotz negativer Y-Geschwindigkeit einen Steigflug an. Und das seltsame dabei ist, dass es gar nicht um den "Collisions"-Befehl geht, sondern das Problem tritt auf, sobald einer Entity der Entitytype zugewiesen wurde.

Code: [AUSKLAPPEN]

Const col_level = 1
Const col_ball = 2

Type throwedthing
   Field entity
   Field x#,y#,z#
   Field xvel#,yvel#,zvel#
   Field angle#
   Field speed#
End Type

Const GRAVITY# = 0.004

Global ball.throwedthing = New throwedthing

angle$ = Input("Angle :")
speed$ = Input("Speed :")

ball\angle = Float(angle$)
ball\speed = Float(speed$)

Graphics3D 1024, 768

cam = CreateCamera ()
CameraViewport cam, 0, 0, GraphicsWidth (), GraphicsHeight ()
MoveEntity cam,0,5,-45

   light1 = CreateLight(1)
   MoveEntity light1,0,15,-20
   
   plane = CreatePlane()
   EntityColor plane,255,255,0
   EntityAlpha plane,0.5
   mirror = CreateMirror()
   EntityColor plane,255,100,100
   EntityType plane,col_level
   EntityType mirror,col_level   
   ball\entity = CreateSphere(6)

   RotateEntity ball\entity,ball\angle,0,0
   MoveEntity ball\entity,0,1,0

   EntityRadius ball\entity,1
   EntityType ball\entity,col_ball
   
   ;Collisions col_ball,col_level,2,2

       ball\xvel = (Cos (EntityPitch(ball\entity))) * ball\speed
       ball\yvel = (Sin (EntityPitch(ball\entity))) * ball\speed

Repeat

   ball\yvel = ball\yvel - GRAVITY

   TranslateEntity ball\entity,ball\xvel,ball\yvel,ball\zvel

   UpdateWorld
   
   RenderWorld

   Text 10,10,"XVEL "+ball\xvel
   Text 10,30,"YVEL "+ball\yvel
   Text 10,50,"ZVEL "+ball\zvel

   Flip

Until KeyHit (1)

End

Man bemerke das auskommentiere Collisions bei diesem Codeschnipsel.

Wäre prima wenn das mal jemand erklären/bestätigen könnte.

EDIT: Also abgesehen davon, dass im obigen Code Fehler waren, scheint dieses Problem nur aufzutreten wenn 2 Entitys kollidieren für die keine Kollisionsabfrage "Collisions" eingetragen wurde, die aber trotzdem einen EntityType besitzen. Warum dann allerdings in dieseem Progrämmchen der Ball nach Oben abhaut, ist mir noch immer unbegreiflich.

Markus2

BeitragFr, Jan 30, 2004 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann das sein das du dort Z benutzen solltest ?

ball\zvel = (Sin (EntityPitch(ball\entity))) * ball\speed
 

Gast

BeitragSa, Jan 31, 2004 12:14
Antworten mit Zitat
Ne, das ist schon richtig so gemeint. Der Ball soll nur nach rechts und nach oben/unten fliegen (vorerst).

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group