Flickering object
Blitz3D Forums/Blitz3D Programming/Flickering object
| ||
Help please. I'm getting an odd flickering thing here with my ship oject, what am I doing wrong?
;3d space flight engine v 3
;now that I have proper physics, I think it may work out
;I'm aiming to fix the gameplay problem involving it just not 'feeling' right
;set up graphics
Graphics3D 1024,768,32
;double buffering
SetBuffer BackBuffer()
;set up tokamak simulator
TOKSIM_SetRigidBodiesCount 1
TOKSIM_SetAnimatedBodiesCount 0
TOKSIM_SetRigidParticleCount 0
TOKSIM_SetControllersCount 0
TOKSIM_SetGeometriesCount 14
TOKSIM_CreateSimulator(0,0,0)
;load the ship
;NOTE: CHANGE THIS TO AN ARRAY!!
Global ship01=LoadMesh("ship1.b3d")
;the camera
Global cam1 = CreateCamera()
CameraViewport cam1,0,0,GraphicsWidth(),GraphicsHeight()
PositionEntity cam1,0,3,-10
;the lights
AmbientLight 100,100,100
;render tweening timer / constants / initial variables
Const FPS=30
period=1000/FPS
time=MilliSecs()-period
;the ship rigid body
ship01rb=TOKRB_Create()
TOKRB_SetPosition ship01rb,0.0,0.0,0.0
TOKRB_SetRotation ship01rb,90.0,180.0,0.0
TOKRB_SetBoxInertiaTensor ship01rb,5.0,5.0,5.0,1.0
TOKRB_SetMass ship01rb,100.0
TOKRB_SetLinearDamping ship01rb,0.1
TOKRB_SetAngularDamping ship01rb,0.1
TOKRB_CollideConnected ship01rb,0
ship01rb_1 = TOKRB_AddBox(ship01rb,-2.20411,-2.88501,2.09501)
TOKGEOM_SetPositionAndRotation g,-3.78355,-0.312894,-0.471711,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_1,0
ship01rb_2 = TOKRB_AddBox(ship01rb,2.0,-0.913641,-1.19867)
TOKGEOM_SetPositionAndRotation g,-3.78568,-2.07925,-0.294399,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_2,0
ship01rb_3 = TOKRB_AddBox(ship01rb,-2.0,-3.0,0.804565)
TOKGEOM_SetPositionAndRotation g,-3.85608,-3.90423,-0.268204,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_3,0
ship01rb_4 = TOKRB_AddBox(ship01rb,1.86821,-0.93018,-0.757756)
TOKGEOM_SetPositionAndRotation g,-3.94073,-5.83604,-0.289075,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_4,0
ship01rb_5 = TOKRB_AddBox(ship01rb,1.44042,-0.808995,-0.571616)
TOKGEOM_SetPositionAndRotation g,-3.83165,-6.66908,-0.3939,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_5,0
ship01rb_6 = TOKRB_AddBox(ship01rb,-1.36885,-1.11293,-0.847562)
TOKGEOM_SetPositionAndRotation g,-2.3013,-0.285581,-0.419939,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_6,0
ship01rb_7 = TOKRB_AddBox(ship01rb,1.5764,-0.906782,-0.5684)
TOKGEOM_SetPositionAndRotation g,-0.947437,-0.327261,-0.415343,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_7,0
ship01rb_8 = TOKRB_AddBox(ship01rb,1.49912,-1.17104,-0.826421)
TOKGEOM_SetPositionAndRotation g,-5.59488,-0.325605,-0.399286,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_8,0
ship01rb_9 = TOKRB_AddBox(ship01rb,1.20174,-0.92761,0.578545)
TOKGEOM_SetPositionAndRotation g,-6.92694,-0.300521,-0.372304,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_9,0
ship01rb_10 = TOKRB_AddBox(ship01rb,0.379707,-2.13287,1.27555)
TOKGEOM_SetPositionAndRotation g,-0.0445214,-0.347584,-0.413206,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_10,0
ship01rb_11 = TOKRB_AddBox(ship01rb,-0.320397,-2.21165,-1.36992)
TOKGEOM_SetPositionAndRotation g,-7.58982,-0.350264,-0.375476,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_11,0
ship01rb_12 = TOKRB_AddBox(ship01rb,0.246424,-1.22218,0.220696)
TOKGEOM_SetPositionAndRotation g,-0.0723057,-1.96473,-0.402167,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex ship01rb_12,0
ship01rb_13 = TOKRB_AddBox(ship01rb,-0.237158,-1.5,0.245809)
TOKGEOM_SetPositionAndRotation g,-7.61479,-1.83985,-0.40037,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex g,0
ship01rb_14 = TOKRB_AddCylinder(ship01rb,1.73311,2.2236)
TOKGEOM_SetPositionAndRotation g,-3.80075,-4.39053,-0.900166,0.0,0.0,0.0
TOKGEOM_SetMaterialIndex g,0
TOKRB_UpdateBoundingInfo ship01rb
;the acceleration variable NOTE: SWITCH THRUST INTO THE SHIP01 ARRAY/TYPE
thrust# = 0
;main loop
While Not KeyDown(1)
;damned render tweening. Make this code more readable at some point. The indenting's all messed up.
Repeat
elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period ;how many 'frames' have elapsed
tween#=Float(elapsed Mod period)/Float(period) ;fractional remainder
For k=1 To ticks
time=time+period
If k=ticks Then CaptureWorld
;;;;;;;;;;;;;;CONTENT HERE;;;;;;;;;;;;;;;;;;;;
;;;acceleration stuff;;;
; if the + key is pressed
If KeyDown(78)
;if not exeeding max speed NOTE: WHEN YOU SET UP AN ARRAY/TYPE INSTANCE FOR THE SHIP, MAKE THIS A VARIABLE
If thrust#<2000
;speed up
thrust# = thrust# + 10
EndIf
EndIf
;if the - key is pressed
If KeyDown(74)
If thrust#>-2000 ; max speed check
;slow down
thrust# = thrust# - 10
EndIf
EndIf
If KeyDown(11)
thrust# = 0
EndIf
;actually move
TOKRB_SetForce ship01rb,0,0,thrust#
;end acceleration stuff
;rotation
;left turn with "a" key
If KeyDown(30)
TOKRB_ApplyImpulse2 ship01rb,0,0,0.5,TOKRB_GetX(ship01rb)+1,TOKRB_GetY(ship01rb),TOKRB_GetZ(ship01rb)
TOKRB_ApplyImpulse2 ship01rb,0,0,-0.5,TOKRB_GetX(ship01rb)-1,TOKRB_GetY(ship01rb),TOKRB_GetZ(ship01rb)
EndIf
;right turn with "d" key
If KeyDown(32)
TOKRB_ApplyImpulse2 ship01rb,0,0,0.5,TOKRB_GetX(ship01rb)-1,TOKRB_GetY(ship01rb),TOKRB_GetZ(ship01rb)
TOKRB_ApplyImpulse2 ship01rb,0,0,-0.5,TOKRB_GetX(ship01rb)+1,TOKRB_GetY(ship01rb),TOKRB_GetZ(ship01rb)
EndIf
;match ship01 to the tokamak rigid body
PositionEntity ship01,TOKRB_GetX#(ship01rb),TOKRB_GetY#(ship01rb),TOKRB_GetZ#(ship01rb)
RotateEntity ship01,TOKRB_GetPitch#(ship01rb),TOKRB_GetYaw#(ship01rb),TOKRB_GetRoll#(ship01rb),False
;camera movement
; PositionEntity cam1,EntityX(ship01),EntityY(ship01)+3,EntityZ(ship01)-10
; PointEntity cam1,ship01
;;;;;;;;;;;;;;;;END CONTENT;;;;;;;;;;;;;;;;;;;;
;update the simulator
TOKSIM_Advance(1.5/FPS,1)
;finish render tweening
UpdateWorld
Next
RenderWorld tween#
;more double buffering
Flip
Wend
TOKSIM_DestroySimulator()
End
Uh, sorry about any vulgar language, It will go through very extensive editing if this works out and I release it with source. I got a bit angry at my indenting :D You will need the 3d model at http://www.freewebs.com/bass-line/projects/3dmodels/ship1.b3d to see the ship, and the tokamak physics wrapper v. 0.4 or higher. Just download from the link on the blitzbasic.com main page. Thanks in advance! |
| ||
| Try adding the following line after you load the ship. RotateMesh ship01,90,180,0 and change the TOKRB_SetRotation line to... TOKRB_SetRotation ship01rb,0.0,0.0,0.0 or simply remove it. I thought I had the rotations all worked out but there still seems to be some nasty little bugs in the code. |
| ||
| Yay it works! Thanks. Now to focus on getting my friction stuff down to sensible amounts... |