cocos2d-x3.0各种事件如何注册监听备忘

来源:互联网 发布:ubuntu怎么安装lamp 编辑:程序博客网 时间:2024/05/07 16:35
3.2改动不少,有很方便的物理引擎封装,下面代码为物理引擎注册碰撞监听的回调,注册触摸事件监听的回调,注册键盘事件的监听和回调。
void MainGame::onEnter(){Layer::onEnter();//添加碰撞 回调监听auto physicsListener = EventListenerPhysicsContact::create();physicsListener->onContactBegin = CC_CALLBACK_1(MainGame::onContactBegin,this);_eventDispatcher->addEventListenerWithSceneGraphPriority(physicsListener,this);//添加键盘事件监听EventListenerKeyboard* keyPadListener = EventListenerKeyboard::create();keyPadListener->onKeyPressed = CC_CALLBACK_2(MainGame::onKeyPressed,this);_eventDispatcher->addEventListenerWithSceneGraphPriority(keyPadListener,this);//添加触摸事件监听auto touchListener = EventListenerTouchOneByOne::create();touchListener->setSwallowTouches(true);touchListener->onTouchBegan = CC_CALLBACK_2(MainGame::onTouchBegan,this);_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener,this);}
bool MainGame::onTouchBegan(Touch* pTouch,Event* pEvent){CCLOG("%s","onTouchesBegan");return true;}void MainGame::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event){CCLOG("%s","onKeyPressed");//方向键if ( keyCode== EventKeyboard::KeyCode::KEY_DPAD_LEFT || keyCode== EventKeyboard::KeyCode::KEY_KP_LEFT || keyCode== EventKeyboard::KeyCode::KEY_LEFT_ARROW || keyCode == EventKeyboard::KeyCode::KEY_LEFT_BRACE|| keyCode == EventKeyboard::KeyCode::KEY_LEFT_BRACKET || keyCode == EventKeyboard::KeyCode::KEY_LEFT_PARENTHESIS  ){CCLOG("LEFT");}elseif(keyCode== EventKeyboard::KeyCode::KEY_DPAD_RIGHT ||keyCode== EventKeyboard::KeyCode::KEY_KP_RIGHT ||keyCode== EventKeyboard::KeyCode::KEY_RIGHT_ARROW ||keyCode== EventKeyboard::KeyCode::KEY_RIGHT_BRACE ||keyCode== EventKeyboard::KeyCode::KEY_RIGHT_BRACKET ||keyCode== EventKeyboard::KeyCode::KEY_RIGHT_PARENTHESIS){CCLOG("RIGHT");}elseif( keyCode== EventKeyboard::KeyCode::KEY_DPAD_UP ||keyCode== EventKeyboard::KeyCode::KEY_KP_UP ||keyCode== EventKeyboard::KeyCode::KEY_UP_ARROW ||keyCode== EventKeyboard::KeyCode::KEY_KP_PG_UP ||keyCode== EventKeyboard::KeyCode::KEY_PG_UP ){CCLOG("UP");}elseif( keyCode== EventKeyboard::KeyCode::KEY_DPAD_DOWN ||keyCode== EventKeyboard::KeyCode::KEY_KP_DOWN ||keyCode== EventKeyboard::KeyCode::KEY_DOWN_ARROW ||keyCode== EventKeyboard::KeyCode::KEY_KP_PG_DOWN ||keyCode== EventKeyboard::KeyCode::KEY_PG_DOWN){CCLOG("DOWN");}else//确定if(keyCode== EventKeyboard::KeyCode::KEY_KP_ENTER ||keyCode== EventKeyboard::KeyCode::KEY_DPAD_CENTER ||keyCode== EventKeyboard::KeyCode::KEY_ENTER){CCLOG("ENTER");}else//返回if(keyCode== EventKeyboard::KeyCode::KEY_BACKSPACE ||keyCode== EventKeyboard::KeyCode::KEY_SPACE ||keyCode== EventKeyboard::KeyCode::KEY_ESCAPE){CCLOG("BACK");}else//菜单if( keyCode== EventKeyboard::KeyCode::KEY_MENU){CCLOG("MENU");}}

bool MainGame::onContactBegin(PhysicsContact& contact){auto spriteA = (Sprite*)contact.getShapeA()->getBody()->getNode();    <span style="white-space:pre"></span>auto spriteB = (Sprite*)contact.getShapeB()->getBody()->getNode();int tagA = spriteA->getTag();int tagB = spriteB->getTag();return true;}

还有关于 cocos2d-x 3.2 物理引擎的 物理刚体的碰撞标识有几个描述特别精髓

PhysicsBody* body = PhysicsBody::createBox(playerSize);body->getShape(0)->setRestitution(0.0f);//反弹力body->getShape(0)->setFriction(0.0f);//摩擦力body->getShape(0)->setDensity(0.1f);//密度 10000000body->setDynamic(false);body->setGravityEnable(false);body->setCategoryBitmask(0x01);    // 0001 我是谁body->setContactTestBitmask(0x02); // 0100 我和谁碰撞触发回调body->setCollisionBitmask(0x02);   // 0011 我实际和谁产生碰撞


补充一个和2.x版本差不多的添加触摸监听的方法

在init中调用如下函数进行设置

this->setTouchEnabled(true);this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE);



0 0
原创粉丝点击