em mới học về cocos2dx bằng c++ và đang thử làm game snake đơn giản nh mà lỗi tùm lum :v ,trong PlayScene chính của game e đặt sự kiện oncontactBegin() để khi rắn va chạm với apple thì sẽ gọi hàm createApple(), nhưng vấn đề là va chạm xảy ra bthg nhưng lại ko tạo dc táo, e đã đặt breakpoint và ktra thấy work rất fine còn thử đặt lời gọi hàm lên update thì kq ra 1 đống táo như bthg
đây là Apple.cpp, class này em kế thừa từ cocos2d::Sprite
#include "Apple.h" #include "Definitions.h" #include <random> #include <time.h> USING_NS_CC;
// on "init" you need to initialize your instance bool Apple::init() { if (!this->initWithFile("apple.png")) { return false; } visibleSize = Director::getInstance()->getVisibleSize(); origin = Director::getInstance()->getVisibleOrigin();
srand(time(NULL)); float randomX = random() % (int)visibleSize.width + origin.x; float randomY = random() % (int)visibleSize.height + origin.y; this->setPosition(randomX, randomY); _body = PhysicsBody::createBox(this->getContentSize(), PhysicsMaterial(0, 0, 0)); _body->setDynamic(false); _body->setCategoryBitmask(eObjectsBitmask::APPLE); //_body->setCollisionBitmask(eObjectsBitmask::HEAD); _body->setContactTestBitmask(eObjectsBitmask::HEAD); this->setPhysicsBody(_body);
return true; }
hàm PlayScene::createApple() :
> void PlayScene::createApple()
{ auto a = Apple::create(); this->addChild(a);
}
còn đây là onContactBegin() :
> bool PlayScene::onContactBegin(PhysicsContact &contact) > { > auto a = contact.getShapeA()->getBody(); > auto b = contact.getShapeB()->getBody(); > if (a->getCategoryBitmask() == eObjectsBitmask::HEAD&&b->getCategoryBitmask() == eObjectsBitmask::APPLE || > b->getCategoryBitmask() == eObjectsBitmask::HEAD&&a->getCategoryBitmask() == eObjectsBitmask::APPLE) > { > > if (b->getCategoryBitmask() == eObjectsBitmask::APPLE) > { > b->getNode()->removeFromParent();
> } > if (a->getCategoryBitmask() == eObjectsBitmask::APPLE) > { > a->getNode()->removeFromParent(); > } > score++; > label->setString(String::createWithFormat("%i", score)->getCString()); > PlayScene::createApple(); > } > return true; > }
do lần đầu đăng bài nên có thể còn sai sót và trình bày xấu, mong các a sớm giúp bế tắc quá !!!