3DSTATEfor Visual basic.Net开发
注:转载请说明来源处!
四、User Input and Program Loops用户输入及程序循环
输入包括键盘输入和鼠标输入。
1、键盘
(1)Form_KeyPress及Form_KeyUp返回一个ASC码值。
(2)GetAsyncKeyState获取键盘。如果键盘没有被按过,则返回值为0。
但是关于键盘输入并不是在Form_KeyPress或Form_KeyDown函数中调用,而是在Timer函数体中。
eg:
If GetAsyncKeyState(Keys.Escape) <> 0 Then
Close() ' [Esc] button is pushed
End If
如果键盘Esc被按过,这返回的值>0,于是退出。
2、鼠标
(1)Form_MouseUp
首先需要将点击的二维点转换为三维点,采用函数STATE_engine_2D_point_to_3D
这里有一个例子,如下:
PrivateSub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMyBase.MouseDown
If e.Button <> MouseButtons.Left Then
Return
EndIf
Dim ObjectHandle As UIntPtr
Dim PolygonHandle As UIntPtr
Dim PositionXYZ(2) AsDouble
If OK <> STATE_engine_2D_point_to_3D(e.X, e.Y, PositionXYZ, ObjectHandle, PolygonHandle) Then
Return
EndIf
MsgBox("X:" + PositionXYZ(0).ToString() + ",Y=" + PositionXYZ(1).ToString() + ",Z=" + PositionXYZ(2).ToString())
EndSub
(2)Form_MouseMove
通过函数STATE_engine_translate_movement_on_screen_to_movement_in_world可以实现鼠标移动对象。
(3)光标的位置
可以通过Form1_MouseMove中e.X和e.Y来获得。隐藏光标和显示光标Cursor.Hide()以及Cursor.Show()
在编程过程中需要注意的:
1、一般程序运行出错都会将错误信息记录到Error.Log文本中。在编写程序的过程中,首先必须检查返回值,要防止返回值为空。
2、渲染:
private Sub Render()
If STATE_engine_is_engine_empty() = NO And Camera <> 0 Then
STATE_engine_render frmMain.hwnd, lngCamera
End If
End Sub
在渲染之前需要检查引擎是否存在以及是否有摄像机。