注:前面部分在网上找的,还不错,后面的细节需要自己注意。
cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持。然而响应键盘消息对于调试来说可以提供不少方便。下边就通过更改cocos2d-x的源码来添加键盘消息响应。
一,打开/cocos2dx/include/CCLayer.h
在CCLayer类的public下添加
virtual void processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam) {}
二,打开/cocos2dx/platform/win32/CCEGLView_win32.h
在CCEGLView类的定义上边声明
class CCLayer;
在CCEGLView类的private下添加变量
CCLayer *m_pLayWin32Key;
在public下添加函数
void SetWin32KeyLayer(CCLayer *pLayer){ m_pLayWin32Key = pLayer;}
三,打开/cocos2dx/platform/win32/CCEGLView_win32.cpp
在文件开始部分添加
#include "CCLayer.h"
在CCEGLView构造函数中初始化CCLayer(NULL)
在WindowProc函数的开始部分添加
if(NULL != m_pLayWin32Key){ m_pLayWin32Key->processWin32KeyPress(message, wParam, lParam);}
四,重新生成libcocos2d将新生成的libcocos2d.lib和libcocos2d.dll放到相应位置
这样就可以在自己的程序中捕获win32的消息了。只需要在某个Layer的初始化部分添加
CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(this);
然后重新继承虚函数processWin32KeyPress,就可以处理消息了。当然在Layer销毁前别忘记调用
CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(NULL);
4)
使用方法HelloWorldScene(.h文件)中增加成员函数
virtual void processWin32KeyPress(UINT message, WPARAM wParam, LPARAMlParam);
在HelloWorldScene.ccp中,增加
void HelloWorld::processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam)
{
//此处与其他win32程序类似,如下
switch(message)
{
caseWM_KEYDOWN:
{
switch(wParam)
{
caseVK_UP:
MessageBox(NULL,L"up",L"test",MB_OK);
break;
caseVK_LEFT:
MessageBox(NULL,L"left",L"test",MB_OK);
break;
caseVK_RIGHT:
MessageBox(NULL,L"right",L"test",MB_OK);
break;
caseVK_DOWN:
MessageBox(NULL,L"down",L"test",MB_OK);
break;
}
}
}
}
同时在HelloWorld::scene()函数中增加(否则没响应)
CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(this);
在结束图层Layer时调用(否则会崩)
CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(NULL);