2048最近火到不行,今天就教大家做一个自己的2048~
2dx版本cocos2d-2.1rc0-x-2.1.3
[b]分析:[/b]
游戏输入:
手势滑动来判断是向哪个方向来滑动.
所以,第一部分我来教大家来做接收手势这部分.
[b]首先,在.h文件里重写生命周期函数[/b]
用来注册和移除委托。
实现:
一定要记得,委托一般都是成对出现的,有注册就要对应有移除。如果你想对一个CCnode进行委托监听,那么创建这个类的时候就可以进行监听了,而当本类退出时也可以对应删除其监听。
所以一班情况,推荐大家将触屏时间的注册与移除代码都写在onEnter和onExit里。如果注册委托不及时移除掉,就有可能造成程序的异常退出。
[b]接下来,定义一些变量,和触摸事件后的方法。[/b]
先不写实现,只是为了测试触屏事件,CCLOG即可~
[b]然后,我们重写触屏回调函数[/b]
OK,这样简单的触屏测试就写完了~
看看效果~
[img]http://dl2.iteye.com/upload/attachment/0096/7856/75f24363-c04f-3e2e-813c-65e636f66408.jpg[/img]
OK,接下来更精彩~
2dx版本cocos2d-2.1rc0-x-2.1.3
[b]分析:[/b]
游戏输入:
手势滑动来判断是向哪个方向来滑动.
所以,第一部分我来教大家来做接收手势这部分.
[b]首先,在.h文件里重写生命周期函数[/b]
用来注册和移除委托。
//重写生命周期函数
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里。如果注册委托不及时移除掉,就有可能造成程序的异常退出。
[b]接下来,定义一些变量,和触摸事件后的方法。[/b]
//坐标
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即可~
[b]然后,我们重写触屏回调函数[/b]
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,这样简单的触屏测试就写完了~
看看效果~
[img]http://dl2.iteye.com/upload/attachment/0096/7856/75f24363-c04f-3e2e-813c-65e636f66408.jpg[/img]
OK,接下来更精彩~