Kamerasteuerung/Terrainbefahren in Ballrennen
Übersicht

![]() |
NoobodyBetreff: Kamerasteuerung/Terrainbefahren in Ballrennen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir ne kurze Auszeit von meinem Grossprojekt genommen und progge daher mal was kleines.
Es sollte so ein kleiner 'Marble Insanity'-Klon werden, wer das kennt. Nur bin ich jetzt auf ein kelines Problem gestossen, nämlich mit der Kamera. Mit EntityRadius und Collisions habe ich verhindern wollen, dass die Kamera durch das Terrain durchgeht, was ziemlich unschön wirkt. Nur bleibt sie nach der Kollision in der Entfernung und in dem Winkel, in dem sie sich wieder losgerissen hat, was dazu führt, dass auch die Kamerasicht nicht mehr mit der Ballbewegung übereinstimmt. Weiss wer von euch, wie ich das am geschicktesten lösen kann? Auch eine andere Frage: Ich habe die Physik mit Collisions einigermassen hinbekommen. Nun ist die Frage, ob ich eine eigene Physik schreiben soll mit Ausrichtung am Terrain, langsamer werden bei schrägen Flächen etc. oder genügt hier Collisions? Hier der Code: Code: [AUSKLAPPEN] Graphics3D 640, 480, 0, 2
SetBuffer BackBuffer() Global winkel Global EGround = CreateTerrain( 32 ) PositionEntity EGround, -16, 0, -16 file = ReadFile( "Level.dat" ) For i = 0 To 31 For t = 0 To 31 ModifyTerrain( EGround, i, t, ReadFloat( file ) ) Next Next CloseFile file ScaleEntity EGround, 2, 5, 2 Global TGround = LoadTexture( "Ground.bmp" ) ScaleTexture TGround, 0.5, 0.5 EntityTexture EGround, TGround EntityType EGround, 1 Global EPlayer = CreateSphere( 16 ) Global TPlayer = LoadTexture( "Player.bmp" ) PositionEntity EPlayer, 0, 5, 0 EntityRadius EPlayer, MeshHeight( EPlayer )/2 ScaleTexture TPlayer, 0.1, 0.1 EntityTexture EPlayer, TPlayer EntityType EPlayer, 2 Collisions 2, 1, 2, 2 Type Vector Field X# Field Y# Field Z# End Type Velocity.Vector = New Vector Velocity\Y# = -0.2 Global KCamera = CreateCamera() CameraViewport KCamera, 0, 0, 640, 480 PositionEntity KCamera, 0, 2, 0 EntityRadius KCamera, 1 EntityType KCamera, 3 Collisions 3, 1, 2, 1 TurnEntity KCamera, 90, 0, -90 MoveEntity KCamera, 0, 0, -4 Global PPivot = CreatePivot() EntityParent KCamera, PPivot TurnEntity PPivot, 0, 0, 60 Global XSpeed#, ZSpeed# Const Maxspeed# = 0.3 timer = CreateTimer( 30 ) HidePointer While Not KeyHit( 1 ) UpdateWorld RenderWorld Positionplayer() Flip 0 WaitTimer timer Wend End Function Positionplayer() Local Altwinkel = Winkel Velo.Vector = First Vector Laenge# = Sqr( Velo\Z#^2 + Velo\X#^2 ) If KeyDown( 200 ) Then Velo.Vector = First Vector If Laenge# < Maxspeed Then Velo\X# = Velo\X# + 0.01*Cos( Winkel ) Velo\Z# = Velo\Z# + 0.01*Sin( Winkel ) EndIf EndIf If KeyDown( 208 ) Then Velo.Vector = First Vector If Laenge# < Maxspeed Then Velo\X# = Velo\X# - 0.01*Cos( Winkel ) Velo\Z# = Velo\Z# - 0.01*Sin( Winkel ) EndIf EndIf MXSpeed = MouseXSpeed() If MXSpeed <> 0 Then TurnEntity EPlayer, 0, -MXSpeed, 0, 1 TurnEntity PPivot, 0, -MXSpeed, 0, 1 Winkel = Winkel - MXSpeed EndIf MYSpeed = MouseYSpeed() If MYSpeed > 0 And EntityRoll( PPivot, 1 ) - MYSpeed > 0 Then TurnEntity PPivot, 0, 0, -MYSpeed ElseIf MYSpeed < 0 And EntityRoll( PPivot, 1 ) - MYSpeed < 70 Then TurnEntity PPivot, 0, 0, -MYSpeed EndIf Velo.Vector = First Vector Local Vektorwinkel# = ATan2( -Velo\X#, Velo\Z# ) Vektorwinkel# = Vektorwinkel# - ( Altwinkel - Winkel )*0.6 Laenge# = Sqr( Velo\Z#^2 + Velo\X#^2 ) Velo\Z# = Laenge#*Cos( Vektorwinkel# ) Velo\X# = -Laenge#*Sin( Vektorwinkel# ) Velo\Z# = Velo\Z#*0.97 Velo\X# = Velo\X#*0.97 Text 0, 0, "Z: " + Velo\Z# + " X: " + Velo\X# + " [LE] " + Laenge TranslateEntity EPlayer, Velo\X#, Velo\Y#, Velo\Z#, 1 TurnEntity EPlayer, 0, 0, -( Laenge#/( MeshHeight( EPlayer )*Pi ) )*360 PositionEntity PPivot, EntityX( EPlayer, 1 ), EntityY( EPlayer, 1 ), EntityZ( EPlayer, 1 ), 1 PointEntity KCamera, EPlayer MoveMouse 320, 240 End Function Wens interessiert, der kann sich hier den Level mit den Texturen runterladen (die Texturen sind hammermässig... ) Klick Danke schon mal im Vorraus |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nee, du hast kein Geschwindigkeitsvektor, da du keine Fallbeschleunigung hast. Schaue dir mal folgenden Code an (Links: so wie es bei dir ist, Rechts: so wie es sein sollte).
Code: [AUSKLAPPEN] Graphics 300,600,0,2
SetBuffer BackBuffer() yp1#=0 yp2#=0 yg2#=0 While Not KeyHit(1) If yp1<500 Then yp1=yp1+2 If yp2<500 Then yg2=yg2+.05 Else yg2=0 yp2=yp2+yg2 Rect 100,yp1,8,8,1 Rect 200,yp2,8,8,1 Flip Cls Wend End edit1: Upss, sorry. Hab ausversehen die PN mit dem Beitrag verwechselt, dann gehts auf öffentlicher Ebene. ![]() |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist auch nicht mehr ganz aktueller Code ![]() In meinem jetzigen Code hab ich das eingebaut mit Beschleunigung, aber trotzdem danke^^ |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group