博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d_x在windows环境下的方向键支持
阅读量:6893 次
发布时间:2019-06-27

本文共 2280 字,大约阅读时间需要 7 分钟。

hot3.png

最近想把小时候玩过的经典的RPG游戏用cocos2d_x给实现出来,于是遇到了方向键响应操作的问题,在cocos里面 目前仅仅支持ESC键和F1,F2功能键,于是我增加了四个方向键的响应,具体操作如下:

1、winproc响应

在windowProc里面添加对应四个方向键的消息响应 代码:

case WM_KEYDOWN:        if (wParam == VK_F1 || wParam == VK_F2)        {            CCDirector* pDirector = CCDirector::sharedDirector();            if (GetKeyState(VK_LSHIFT) < 0 ||  GetKeyState(VK_RSHIFT) < 0 || GetKeyState(VK_SHIFT) < 0)                pDirector->getKeypadDispatcher()->dispatchKeypadMSG(wParam == VK_F1 ? kTypeBackClicked : kTypeMenuClicked);        }        else if (wParam == VK_ESCAPE)        {            CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked);        }		else if (wParam == VK_LEFT)		{			CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(KTypeLeftDown);		}		else if (wParam == VK_RIGHT)		{			CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(KTypeRightDown);		}		else if (wParam == VK_UP)		{			CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(KTypeUpDown);		}		else if (wParam == VK_DOWN)		{			CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(KTypeDownDown);		}

2、事件分发

在上面的响应回调函数中我们看到了这个函数getKeypadDispatcher(),这个是获取键盘的事件分发器,dispatchKeypadMSG(KTypeUpDown)这个函数是分发器将事件分发给响应的委托对象去处理,我们进入这个函数瞧瞧,关键代码如下:

if (m_pDelegates->count() > 0)    {        CCObject* pObj = NULL;        CCARRAY_FOREACH(m_pDelegates, pObj)        {            CC_BREAK_IF(!pObj);            pHandler = (CCKeypadHandler*)pObj;            pDelegate = pHandler->getDelegate();            switch (nMsgType)            {            case kTypeBackClicked:                pDelegate->keyBackClicked();                break;            case kTypeMenuClicked:                pDelegate->keyMenuClicked();                break;			case KTypeDownDown:				pDelegate->keyDownDown();				break;			case KTypeUpDown:				pDelegate->keyUpDown();				break;			case KTypeRightDown:				pDelegate->keyRightDown();				break;			case KTypeLeftDown:				pDelegate->keyLeftDown();				break;            default:                break;            }        }    }

3、重写实现函数

这段代码是循环已经注册过的委托对象,找到当前响应层的委托对象执行相应的事件操作,我们知道CCLayer类是继承了CCKeypadDelegate类的因此,我们在CCLayer层的子类中重写了四个响应函数这样就可以实现我们想要的内容了。

转载于:https://my.oschina.net/JeremyOuyang/blog/164528

你可能感兴趣的文章
dhtmlxCombo ztree
查看>>
第16期-Linux运维挑战赛
查看>>
Java的类型擦除
查看>>
好程序员web前端教程分享js闭包
查看>>
可以给redis的hash中的hashKey设置expire吗?
查看>>
Python获取本机 IP/MAC(多网卡)
查看>>
jQuery EasyUI 学习资料链接整理
查看>>
iOS textView 选中指向左上角
查看>>
OpenSSL学习(十二):基础-指令gendsa
查看>>
mac:python:pycharm:osx:可怕的case-sensitive硬盘格式
查看>>
MySQL备份与恢复
查看>>
Unsupported major.minor version
查看>>
PHP框架高级编程——应用Symfony、CakePHP和Zend
查看>>
读取xml节点值生成一个实体类,读取xml所有节点值,读取所有xml所有节点名称
查看>>
RAC 归档目录不同的备份
查看>>
配置管理小报100122:能者上、平者让、庸者下
查看>>
配置管理小报100204:产品路线图
查看>>
开发 Windows RT 桌面应用(来自 Surface RT)
查看>>
iOS 6版本与之前版本差异总结
查看>>
JNI编程(二) —— 让C++和Java相互调用(1)
查看>>