——蛇和食物的封裝
前面我們已經把蛇的“地盤”規劃好了,現在的任務是要讓這個“主人”和它的食物出現在“地盤”上。那麼怎麼才能讓它出現呢?
我們前面學過如何創建圖層,蛇和食物也是一個圖層。是不是直接用Sprite創建就好了呢?答案是當然了。但是隻用Sprite是不行的,因爲蛇有身體,每喫掉一個食物身體就長一截,那麼是不是會變成每喫掉一個食物就得有一句Sprite::create() 。
這樣是不行的,我們需要把蛇和食物給封裝到一個類中,這樣方便我們創建和刪除
定義一個Snake類繼承Node類
class Snake : public Node
{
public:
static Snake * create(int type);
bool init(int type);
int row; //行
int col; //列
int dir;//方向
};
在創建Snake類的對象時,會傳遞一個參數type,通過type來確定是要創建蛇頭、身體還是食物
Snake * Snake::create(int type)
{
Snake *ret = new Snake();
if (ret && ret->init(type))
{
ret->autorelease();
return ret;
}
else
{
CC_SAFE_DELETE(ret);
return nullptr;
}
}
bool Snake::init(int type)
{
if (!Node::init()) {
return false;
}
Sprite * s;
//根據類型判斷 產生 1.蛇頭 2.身體 3.食物
switch(type)
{
case 1:
s = Sprite::create("head.png");
break;
case 2:
{
int num = random(1, 6);
s = Sprite::create(StringUtils::format("body0%d.png" , num));
}
break;
case 3:
s = Sprite::create("food.png");
break;
default:
break;
}
s->setAnchorPoint(Vec2::ZERO);
s->setPosition(Vec2(0.5 , 0.5));
this->addChild(s);
return true;
}
這樣我們就把蛇和食物給封裝好了,接下來就需要讓它們出現網格中。
回到遊戲場景
在init()中
//創建頭和食物
//snakeHead
head = Snake::create(1);
head->col = rand()%10;
head->row = rand()%10;
head->setPosition(Vec2(head->col*GAME_TILED_WIDTH , head->row*GAME_TILED_HEIGHT));
bg->addChild(head);
//init snake dir
head->dir = UP;
//food
food = Snake::create(3);
food->col = rand()%10;
food->row = rand()%10;
food->setPosition(Vec2(food->col*GAME_TILED_WIDTH , food->row*GAME_TILED_HEIGHT));
bg->addChild(food);
點擊運行,就可以看到蛇頭和食物了。
蛇頭和食物已經出現在“地盤”中了,接下來就該讓蛇頭進行移動,畢竟人家的地盤嘛,想去哪就去哪…
未完待續。。。。
——————————9秒學院學習日誌