——蛇頭的移動
蛇和它的食物已經出現在它的“地盤”之中,但是它無法移動,只能眼睜睜的看着食物卻無可奈何。
所以我們現在的任務呢就是幫助蛇喫到食物 ,也就是讓蛇動起來
首先,我們在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秒學院學習日誌