`
caiwb1990
  • 浏览: 307693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

4. cocos2dx教你做2048 (一)

阅读更多
2048最近火到不行,今天就教大家做一个自己的2048~
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,接下来更精彩~

  • 大小: 14.2 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics