chào mọi người, em có đang làm game snake thì có gặp một vấn đề đó là
Con snake em xem nó là một node, node này chứa nhiều sprite là các bộ phận của con rắn.
thế nên em mới có class Snake thừa kế class Node, và class SnakeParts thừa kế class Sprite
Sau đấy em add node vào một layer, và layer này được add vào scene.
Tóm tắt ý tưởng như sau: trong hàm init của file scene.cpp em tạo một layer. Khi layer được tạo nó đồng thời tạo luôn snake, snake tạo thì snakeparts cũng được tạo. Trong class snake em có hàm update để di chuyển con rắn.Hàm update được gọi như sau: trong file scene.cpp em có gọi hàm update, trong hàm update này em có gọi update của layer, update của layer gọi update của snake.
Code của em ạ:
scene.cpp
bool GameScene::init()
{
....
/////
pLayer = new PlayLayer();
this->addChild(pLayer);
this->scheduleUpdate();
return true;
}
void GameScene::update(float dt)
{
pLayer->update();
}
file layer.cpp
PlayLayer::PlayLayer()
{
visibleSize = cocos2d::Director::getInstance()->getVisibleSize();
score = 0;
snake = Snake::create();
snake->setPosition(Vec2(Globals::getVisibleSize().width / 2 - 300, Globals::getVisibleSize().height / 2 + 50));
this->addChild(snake, 5);
food = Food::create();
this->addChild(food, 2);
snake->currentFood = food;
gameOver = false;
}
void PlayLayer::update()
{
snake->update();
}
hàm update của snake
void Snake::update(){
{
auto _mp = snakeHead->getPosition();
auto _Mp = _mp.operator+(Vec2(BODY_INTERVAL * sind(snakeHead->getRotation()), BODY_INTERVAL * cosd(snakeHead->getRotation())));
snakeHead->setPosition(_Mp);
}
isMoving = true;
for (int i = 1; i < size; i++){
auto _mp = snakeBodyParts.at(i)->getPosition();
Vec2 vec(snakeBodyParts.at(i - 1)->getPosition().x, snakeBodyParts.at(i - 1)->getPosition().y);
auto _Mp = _mp.operator+(vec);
snakeBodyParts.at(i)->setPosition(_Mp);
}
}
Nhìn code có vẻ ổn nhưng khi run thì nó ko hiện ra con rắn lun ạ. Mong mọi người giúp đỡ !