小小菜之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秒學院學習日誌

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章