得不到正确的值,第一帧之前,Maths.Project3DPointTo2D .Main…
tv3d吧
全部回复
仅看楼主
level 7
用这个: Maths.Project3DPointTo2D .Main.GetPosition, .X2D, .Y2D, False
在第一帧之前初始化时返回屏幕坐标为:-1.#ind,这是溢出,可是在循环后又可以
代码:
Sub InitializeScene()
Dim i As Integer
Set TV3D = New TVEngine
DisplayIsWindow = True '先宣染到窗口方便调试
If DisplayIsWindow Then
TV3D.Init3DWindowed Form2.hWnd
CurrentSCRWidth = Form2.ScaleWidth: CurrentSCRHeight = Form2.ScaleHeight
Else
'TV3D.Init3DFullscreen CurrentSCRWidth, CurrentSCRHeight, 32, True, False, CurrentSCRBitDepth, 1
End If
TV3D.SetSearchDirectory App.Path
TV3D.DisplayFPS True
Set Scr2D = New TVScreen2DImmediate
Set ScrWrite = New TVScreen2DText
MyFont = ScrWrite.NormalFont_Create("MF", "宋体", 20, False, False, False)
Set InputEngine = New TVInputEngine
InputEngine.Initialize '别忘了输入引擎初始化
Set Scene = New TVScene
TV3D.SetAngleSystem TV_ANGLE_DEGREE
Set TextureFactory = New TVTextureFactory
TextureFactory.LoadTexture "Media\AirBalloon.jpg", "ball"
For i = 0 To TanBallAmount - 1
With ColorBall(i)
Set .Main = Scene.CreateMeshBuilder(i) '注意 main的名字i刚好和ColorBall的i一致,所以当球互相碰撞时碰到了名字为 0的球,就知道它是0号ColorBall
.Radius = 6
Randomize
.YSpeed = Rnd * Rnd * (2 * Int(Rnd * 2) - 1) * 0.1
.XSpeed = Rnd * Rnd * (2 * Int(Rnd * 2) - 1) * 0.1
Randomize
.Main.CreateSphere .Radius
.PozY = Int(Rnd * (121 - .Radius + 1)) + .Radius - 11
.PozX = Int(Rnd * (154 - .Radius + 1)) + .Radius - 77
.Main.SetPosition .PozX, .PozY, 0
Maths.Project3DPointTo2D .Main.GetPosition, .X2D, .Y2D, False
.LastX2D = .X2D
.LastY2D = .Y2D
.Main.SetTexture GetTex("ball")
.HaveCollision(i) = 0
End With
Next
Set ImpactSound = New TVSoundMP3
ImpactSound.Load "media\piqiu2.wav"
Set TTT = Scene.CreateMeshBuilder
TTT.CreateSphere 1
'int(rnd*1001-500)
'a到b之间的整数,即int(rnd*(b-a+1)+a)
CameraPozX = 0
CameraPozY = 50
CameraPozZ = -150
DoLoop = True
If DisplayIsWindow Then Form2.Show
Main_Loop
End Sub
已发到TV3D官网,不知有没有老外知道是为什么。
2013年04月09日 02点04分 1
1