【cocos2dx】上下左右简单的触控分析


下面的代码在 bool Game::init(){  中。

// on Touch  ;moved by 10 pix we think it moved
	//触控设置
	//定义:
	//bool m_startMove;//是否开始移动
	//int m_x, m_y;//触摸开始的点

	auto event = EventListenerTouchOneByOne::create();
	event->onTouchBegan = [&](Touch*tou, Event *eve){
		m_x = tou->getLocation().x;
		m_y = tou->getLocation().y;
		m_startMove = true;
		//CCLOG("onTouchBegan  m_x = %d,m_y = %d", m_x, m_y);
		return true;
	}; 

	
	event->onTouchMoved = [&](Touch*tou, Event *eve){

		int x = tou->getLocation().x;
		int y = tou->getLocation().y;
		//CCLOG("onTouchMoved  m_x = %d,m_y = %d", x, y);
		if(m_startMove && (abs(m_x - x) > 10 || abs(m_y - y) > 10))
		{
			//reference OPENGL 坐标
			m_startMove = false;
			E_MOVE_DIR dir;
			if (abs(m_x - x) > abs(m_y - y)){
				//move by X dirction
				if (m_x < x){
					dir = E_MOVE_DIR::RIGHT;
					CCLOG("==E_MOVE_DIR == right");
				}
				else
				{
					dir = E_MOVE_DIR::LEFT;
					CCLOG("==E_MOVE_DIR == left");
				}
			}
			else{
				// move by Y direction
				if (m_y < y){
					dir = E_MOVE_DIR::UP;
					CCLOG("==E_MOVE_DIR == up");
				}
				else{
					dir = E_MOVE_DIR::DOWN;
					CCLOG("==E_MOVE_DIR == down");
				}
			}
			moveAllTiled(dir);//移动所有的元素块
		}
		
	};
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(
		event, this);
	return true;// end of  Game::init
}

void Game::moveAllTiled(E_MOVE_DIR dir){
	//移动所有的块,消除
	//CCLOG("==some of the Tiled have moved!!!");

	switch (dir)
	{
	case E_MOVE_DIR::UP:
		moveUp();
		break;
	case E_MOVE_DIR::DOWN:
		moveDown();
		break;
	case E_MOVE_DIR::LEFT:
		moveLeft();
		break;
	case E_MOVE_DIR::RIGHT:
		moveRight();
		break;
	default:
		break;
	}
	//music 
	// 判定输赢
	//产生新块
	newMovedTiled();
}



在Game这个层中进行监听触控方向,当移动10个像素的值时,我们认为他移动了,我们就进行相应的动作。

注意函数的写法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值