小小菜之Cocos2d-x游戏开发旅程——项目实例:贪吃蛇(3)

——蛇头的移动

蛇和它的食物已经出现在它的“地盘”之中,但是它无法移动,只能眼睁睁的看着食物却无可奈何。
所以我们现在的任务呢就是帮助蛇吃到食物 ,也就是让蛇动起来
首先,我们在GameScene中定义一个移动的方法,在这之前,需要先定义一个枚举来控制蛇的方向

enum DIR
{
    UP,
    DOWN,
    LEFT,
    RIGHT
};

在初始化蛇头时让它的方向朝上head->dir = UP;
之后我们实现蛇头移动的方法

void Game::logic(float t)
{
    //move head
    switch(head->dir)
    {
        case UP:
            head->row++;
            break;
        case DOWN:
            head->row--;
            break;
        case LEFT:
            head->col--;
            break;
        case RIGHT:
            head->col++;
            break;
    }
    head->setPosition(Vec2(head->col*GAME_TILED_WIDTH , head->row*GAME_TILED_HEIGHT));
}

OK,我们已经成功了一半,还需要把logic加入到schedule中,让蛇自己动起来

this->schedule(schedule_selector(Game::logic) , 0.5);

。。。。

大家是不是觉得还少了一点什么呢,是的,现在的蛇只能往上走,走着走着就不见了。。所以现在最后一步就是用户交互,也就是进行触摸处理。通过触摸屏幕来改变蛇的方向,让蛇不会走着走着就不见了

在GameScene.h中添加一个ontouchBegan方法

bool onTouchBegan(Touch *t , Event *e); //change dir

在GameScene.cpp中实现它

bool Game::onTouchBegan(Touch *t, Event *e)
{
    int mx = abs((t->getLocation().x -2) - head->col*76);
    int my = abs((t->getLocation().y -300) - head->row*76);

        if(mx > my)
        {
            if(t->getLocation().x-2 > head->col*76 )   //向右
            {
                head->dir = RIGHT;
            }
            else   //向左
            {
                head->dir = LEFT;
            }

        }
        else
        {
            if(t->getLocation().y-300 > head->row*76 )   //向上
            {
                head->dir = UP;
            }
            else   //向下
            {
                head->dir = DOWN;
            }
        }


    return true;
}

通过获得点击屏幕的坐标和当前蛇头的坐标来改变蛇的方向


这样成功的让蛇移动起来了,当然蛇还是不能吃掉它的食物,O(∩_∩)O哈哈!

未完待续….

——————9秒学院学习日志

你可能感兴趣的:(cocos2d-x,cocos2d-x教程)