2dx版本cocos2d-2.1rc0-x-2.1.3
分析:
游戏输入:
手势滑动来判断是向哪个方向来滑动.
所以,第一部分我来教大家来做接收手势这部分.
首先,在.h文件里重写生命周期函数
用来注册和移除委托。
//重写生命周期函数 virtual void onEnter(); virtual void onExit();
实现:
void game2048::onEnter() { CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false); CCLayer::onEnter(); } void game2048::onExit() { CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); CCLayer::onExit(); }
一定要记得,委托一般都是成对出现的,有注册就要对应有移除。如果你想对一个CCnode进行委托监听,那么创建这个类的时候就可以进行监听了,而当本类退出时也可以对应删除其监听。
所以一班情况,推荐大家将触屏时间的注册与移除代码都写在onEnter和onExit里。如果注册委托不及时移除掉,就有可能造成程序的异常退出。
接下来,定义一些变量,和触摸事件后的方法。
//坐标 float beginX; float beginY; float endX; float endY; //滑向上下左右的方法 bool swipeUp(); bool swipeDown(); bool swipeLeft(); bool swipeRight();
bool game2048::swipeUp() { CCLOG("doUp"); return true; } bool game2048::swipeDown() { CCLOG("doDown"); return true; } bool game2048::swipeLeft() { CCLOG("doLeft"); return true; } bool game2048::swipeRight() { CCLOG("doRight"); return true; }
先不写实现,只是为了测试触屏事件,CCLOG即可~
然后,我们重写触屏回调函数
virtual bool ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *unused_event); virtual void ccTouchEnded(cocos2d::CCTouch *touch, cocos2d::CCEvent *unused_event);
bool game2048::ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *unused_event) { //记录初始点 CCPoint curPoint = touch->getLocation(); touch->getLocationInView(); beginX=curPoint.x; beginY=curPoint.y; return true; } void game2048::ccTouchEnded(cocos2d::CCTouch *touch, cocos2d::CCEvent *unused_event) { //获取X轴和Y轴的移动范围 CCPoint curPoint=touch->getLocation(); endX=beginX - curPoint.x; endY=beginY - curPoint.y; //判断X轴和Y轴的移动距离,如果X轴的绝对值大,则向左右滑动,如果Y轴的绝对值大,则向上下滑动 if(abs(endX) > abs(endY)) { //判断向左还是向右 if(endX + 5 >= 0) { swipeLeft(); } else { swipeRight(); } } else { //判断手势向上还是向下 if(endY + 5 >= 0) { swipeDown(); } else { swipeUp(); } } }
OK,这样简单的触屏测试就写完了~
看看效果~
OK,接下来更精彩~