在很多时候,使用键盘控制场景中的物体也是一项基本要求。本节将编码实现键盘对观察者的控制。
引入键盘类的头文件为:#include “vpInputKeyboard.h”。
键盘类视图如图6.10.1所示。Vega Prime 提供了键盘对应的全部功能键,比如小写字母f 对应vpWindow::KEY_f,大写字母 F 对应 vpWindow::KEY_F,上下键分别对应vpWindow::KEY_UP 和vpWindow::KEY_DOWN,左右键分别对应vpWindow::KEY_LEFT 和vpWindow::KEY_RIGHT。
首先,为了使用方便,像定义声明主线程函数一样,定义声明键盘函数:
//运动场景键盘操作函数
static void CTS_Keyboard(vpWindow *window,vpWindow::Key key,int modifier,void *);
把该函数定义为PublicMeber 类的静态成员函数,其中最关心的是该函数的第2个参数key,它用来识别用户的按键。该函数的具体代码如图6.10.2所示,其中的静态变量PublicMember::CTS_pObject_observer 是定义设置的观察者对象指针,定义方法与前面定义静态成员变量一样。
图6.10.1 键盘类继承图
图6.10.2 键盘函数
定义完键盘函数PublicMember::CTS_Keyboard 后,还需要把它设置成对应窗口的键盘函数才能真正起作用。在主线程中,将添加以下代码:
//设置窗体
vpWindow * vpWin= * vpWindow::begin();
vpWin->setParent(PublicMember::CTS_RunningWindow);
vpWin->setBorderEnable(false);(www.daowen.com)
vpWin->setFullScreenEnable(true);
//设置键盘
vpWin->setInputEnable(true);
vpWin->setKeyboardFunc((vrWindow::KeyboardFunc)PublicMember::CTS_Keyboard,NULL);
vpWin->open();
::SetFocus(vpWin->getWindow());
其中,第2行、第3行、第4行代码分别设置了窗体的位置、边界、全屏,对键盘函数的设定,实际上包含以下两行代码:
vpWin->setInputEnable(true);
vpWin->setKeyboardFunc((vrWindow::KeyboardFunc)PublicMember::CTS_Keyboard,NULL);
在主线程中对观察者对象指针PublicMember::CTS_pObject_observer 进行了赋值,其中的代码如下:
//设置观察者
PublicMember::CTS_pObject_observer=vpObject::find("hummer");
PublicMember::CTS_pObject_observer->ref();
在前面已经用代码把观察者绑定到了汽车上,实际上,并没有直接获取观察者指针的值,而是根据名称获取了汽车对象指针的值,操作汽车就能跟随汽车观察场景了。图6.10.3所示为改造后的完整主线程程序,请仔细查看其中加粗了字体的代码。
图6.10.3 Vega Prime应用程序主线程函数
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。