cocos2d_x在windows环境下的方向键支持

最近想把小时候玩过的经典的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层的子类中重写了四个响应函数这样就可以实现我们想要的内容了。

你可能感兴趣的:(cocos2d_x在windows环境下的方向键支持)