cocos2d-x3.0各种事件如何注册监听备忘
2014-09-11 17:05
411 查看
3.2改动不少,有很方便的物理引擎封装,下面代码为物理引擎注册碰撞监听的回调,注册触摸事件监听的回调,注册键盘事件的监听和回调。
还有关于 cocos2d-x 3.2 物理引擎的 物理刚体的碰撞标识有几个描述特别精髓
补充一个和2.x版本差不多的添加触摸监听的方法
在init中调用如下函数进行设置
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"); } else if( 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"); } else if( 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"); } else if( 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);//密度 10000000 body->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);
相关文章推荐
- Cocos2d-js创建构造注册事件监听回调函数
- c#如何取得事件注册的方法
- 如何给Body动态注册事件
- android 上层应用如何监听 sdcard的插拔事件
- 如何通过代码注册或取消事件?
- ABAP: 如何让ALV Tree的注册事件在屏幕PAI之后触发
- javascript 注册持续监听事件
- 【Cocos2d游戏开发之五】多触点与触屏事件详解(单一监听、事件分发)
- 如何正确监听Stage对象的事件
- asp.net中如何把应用程序错误写入事件日志(注册事件源)
- 如何在VC代码中监听ArcEngine的COM事件
- js中如何注册事件
- 如何判断通过WSAAsyncSelect 注册的事件中,发生的是那个
- 如何在Swing中,进行某个操作,而不触发事件监听
- 如何正确监听Stage对象的事件·续
- c#如何取得事件注册的方法
- Flex中如何通过监听focusIn和focusOut事件,在通过displayAsPassword属性固定密码格式显示文本框获取焦点时显示文本
- Flex中如何通过监听itemClick事件检测FlexRadioButtonGroup中RadioButton被点击的例子
- Flash/Flex学习笔记(35):如何正确监听Stage对象的事件
- C# 在类中如何注册事件与取消事件注册