C++ replaceSecene()将公共变量弄乱
我正在将一个游戏从cocos2diphone2.x移植到cocos2d-x3.x。 必须解决一些问题,包括一次重大事故——这篇文章的主题 已经确定发生崩溃是因为有时候,我的replaceSecene调用会导致一个混乱的重要公共变量 我的班级:C++ replaceSecene()将公共变量弄乱,c++,ios,mobile,cross-platform,cocos2d-x,C++,Ios,Mobile,Cross Platform,Cocos2d X,我正在将一个游戏从cocos2diphone2.x移植到cocos2d-x3.x。 必须解决一些问题,包括一次重大事故——这篇文章的主题 已经确定发生崩溃是因为有时候,我的replaceSecene调用会导致一个混乱的重要公共变量 我的班级: class Player : public cocos2d::Sprite { public: .... cocos2d::Vec2 desiredPosition; .... 我的图层方法: Scene* GameLevelLa
class Player : public cocos2d::Sprite
{
public:
....
cocos2d::Vec2 desiredPosition;
....
我的图层方法:
Scene* GameLevelLayer::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = GameLevelLayer::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool GameLevelLayer::init()
{
// super init first
if ( !Layer::init() )
{
return false;
}
....
player = (Player*) cocos2d::Sprite::create("sprite_idle_right@2x.png");
player->setPosition(Vec2(100, 50));
player->desiredPosition = player->getPosition();
....
this->schedule(schedule_selector(GameLevelLayer::update), 1.0/60.0);
....
return true;
}
void GameLevelLayer::endGame(bool won) {
....
MenuItem* display;
if (currentLevel < lastLevel && won) {
++currentLevel;
display = MenuItemImage::create("next.png" ,"next.png" ,"next.png",
CC_CALLBACK_1(GameLevelLayer::replaceSceneCallback, this));
} else {
// Lost the game
currentLevel = 1;
display = MenuItemImage::create("replay.png", "replay.png", "replay.png",
CC_CALLBACK_1(GameLevelLayer::replaceSceneCallback, this));
}
....
}
void GameLevelLayer::replaceSceneCallback(Ref* sender) {
Director::getInstance()->replaceScene(this->createScene());
}
被邀请的成员是理想的职位。它在更新方法中更改。问题是更新得到的是一个已经混乱不堪的理想位置。它只是在一个场景被替换后才变得一团糟。这个问题大约每10次出现一次。甚至在场景被替换后第一次调用update时,desiredPosition设置为一些垃圾。是我无法学到更多
我的Player类没有单独的构造函数
请告知。我忘了初始化另一个实例变量。该实例变量用于计算所需的位置。CoCoCoS2D::Sprite::create创建的是一个精灵,而不是一个玩家,因此您到处都有未定义的行为。你的代码有时能工作真是倒霉。那不是构造函数,而是工厂函数。它不会创建一个玩家。您正在创建的对象之外进行编写,该对象未定义。我的意思是create调用构造函数,如:Sprite*Sprite=new std::nothrow Sprite;也许你是对的。我得考虑一下。