- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 打蜜蜂
然可以操作其他窗口。
⑥ 按键处理
在本例程中,按键处理采用异步定时器查询方式,需要将定时器的触发时间设置极短,这样会占用大量系统资源。另外,也可以停止异步定时器,采用LabWindows/CVI 事件响应机制,在面板回调函数panelCB 中添加EVENT_KEYPRESS 事件代码,程序如下:
int CVICALLBACK panelCB (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
int character;
int vk;
switch (event)
{
case EVENT_KEYPRESS:
// 获得虚拟键↑↓←→的按键状态,以及是否按下a 键
vk = GetKeyPressEventVirtualKey (eventData2);
character = GetKeyPressEventCharacter (eventData2);
switch (vk)
{
case VAL_LEFT_ARROW_VKEY:
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_LEFT, gun.left–10);
break;
case VAL_RIGHT_ARROW_VKEY:
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_LEFT, gun.left+10);
break;
case VAL_UP_ARROW_VKEY:
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_TOP, gun.top–10);
break;
case VAL_DOWN_ARROW_VKEY:
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_TOP, gun.top+10);
break;
}
if (('a' == tolower (character)) && (!shootflag))
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_LEFT, gun.left+
gun.width/2–8);
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_TOP, gun.top);
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_VISIBLE, 1);
sndPlaySound("bullet.wav", SND_SYNC);
shootflag = 1;
}
以上程序中,获得虚拟键值和字符可以用GetKeyPressEventVirtualKey 和GetKeyPress
EventCharacter 函数,也可以采用EVENT_KEYPRESS 事件的eventData1 参数获得相关数据,即将以上两个函数用以下代码代替。
vk = eventData1 & 0xFF00;
character = eventData1 & 0x00FF;
(4)运行效果图
点击工具栏中的Debug Project 按钮,程序开始运行,其效果如图4-19 所示。
图4-19 运行效果图
相关阅读
《虚拟仪器技术,将"软件就是仪器"进行到底!》
上一篇:怎样采用多种单端信号驱动低功率、1Msps、±2.5V
差分输入、16
位
ADC
下一篇:LabWindows/CVI虚拟仪器设计技术场景与游戏设计之:
下雪场景