Cocos2d-x Sprite继承类错误

时间:2015-12-05 21:08:04

标签: cocos2d-x

我正在进行一场太空战游戏 我完成了添加敌人,射击子弹,检测碰撞 下一步是为每个对象添加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;"。

2 个答案:

答案 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");