您的位置:首页 > 移动开发 > Cocos引擎

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

2014-09-11 17:05 411 查看
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");
	}
	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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: