我正在进行一场太空战游戏 我完成了添加敌人,射击子弹,检测碰撞 下一步是为每个对象添加HP。
我创建了继承Sprite的类
class Target : public cocos2d::Sprite
{
public:
int hp = -1;
};
我通过在下面添加3个代码行来检查HP是否改变良好。
Target *target = new Target();
target->hp = 1;
CCLog("hp: %d", target->hp);
结果:
hp:1
问题是,在按此行返回Sprite之后,
target = (Target*)Sprite::createWithSpriteFrameName("enemy1.png");
CCLog("hp: %d", target->hp);
结果是
hp:-33686019
此外,我无法更改HP变量。当我更改它时,调试器停在" target-> hp = 1;"。
答案 0 :(得分:1)
你做错了。首先 - 你不能在.h文件中初始化int。第二 - 不要直接使用new - 如果处理不当会很容易导致内存泄漏,而是使用cocos2d-x模式。
我会这样做:
.h文件:
#ifndef __Sample__Target__
#define __Sample__Target__
#include "cocos2d.h"
USING_NS_CC;
class Target : public Sprite
{
public:
static Target* create(const std::string& filename);
int hp;
};
#endif
.cpp文件:
#include "Target.h"
Target* Target::create(const std::string& filename) {
auto ret = new (std::nothrow) Target;
if(ret && ret->initWithFile(filename)) {
ret->autorelease();
ret->hp = 1; //declare here or in init
return ret;
}
CC_SAFE_RELEASE(ret);
return nullptr;
}
答案 1 :(得分:0)
试试这个,
target = Target::createWithSpriteFrameName("enemy1.png");