Android 使用Cocos2d-x中的类创建一个;“敌人”;延伸层 PoCo 2CX和C++从一个Objut-C背景中很新。我正在做一个游戏,你可以在屏幕上一次有1-10个敌人。每个敌人的身体有1个精灵和2个属性(生命和伤害)

Android 使用Cocos2d-x中的类创建一个;“敌人”;延伸层 PoCo 2CX和C++从一个Objut-C背景中很新。我正在做一个游戏,你可以在屏幕上一次有1-10个敌人。每个敌人的身体有1个精灵和2个属性(生命和伤害),android,c++,ios,cocos2d-x,Android,C++,Ios,Cocos2d X,在过去使用Objective-C时,我能够定义Class.h/Class.mm文件,并用我想要的变量(健康、速度、身高、体重、颜色等)填充它,但我很难在Cocos2dx中找到如何做到这一点的方法 这里有一个简单的项目,可以解决我的问题。我确信这是直截了当的,但我在寻找解决方案时遇到了困难 //-----Enemy.h #include "cocos2d.h" USING_NS_CC; class Enemy : public cocos2d::Layer{ public: virtual

在过去使用Objective-C时,我能够定义Class.h/Class.mm文件,并用我想要的变量(健康、速度、身高、体重、颜色等)填充它,但我很难在Cocos2dx中找到如何做到这一点的方法

这里有一个简单的项目,可以解决我的问题。我确信这是直截了当的,但我在寻找解决方案时遇到了困难

//-----Enemy.h
#include "cocos2d.h"
USING_NS_CC;
class Enemy : public cocos2d::Layer{
public:
    virtual bool init();
    CREATE_FUNC(Enemy);
    void setHealth(int val);

private:
    int myHealth;
    Sprite *body;
    Sprite *weapon;

};

//-----Enemy.cpp
#include "Enemy.h"
USING_NS_CC;

bool Enemy::init()
{
    if ( !Layer::init() )
        return false;
    return true;
}

void setHealth(int newHealth)
{
    //myHealth = newHealth;
}

//-----HelloWorldScene.h
#include "cocos2d.h"
USING_NS_CC;
class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();  
    CREATE_FUNC(HelloWorld);

};

//-----HelloWorldScene.cpp
#include "HelloWorldScene.h"
#include <iomanip>
#include "Enemy.h"
USING_NS_CC;

Scene* HelloWorld::createScene()
{
    auto scene = Scene::create();
    auto layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    if ( !Layer::init() )
        return false;
    Enemy *newEnemy = Enemy::create();
    //newEnemy->setHealth(100);
    this->addChild(newEnemy);
    return true;
 }
/----敌方.h
#包括“cocos2d.h”
使用\u NS\u CC;
类敌人:公共cocos2d::层{
公众:
虚拟bool init();
创建_FUNC(敌人);
void setHealth(int val);
私人:
国际卫生组织;
雪碧*身体;
精灵*武器;
};
//-----敌方
#包括“敌人h”
使用\u NS\u CC;
bool敌人::init()
{
如果(!Layer::init())
返回false;
返回true;
}
void setHealth(int newHealth)
{
//我的健康=新健康;
}
//-----HelloWorld场景
#包括“cocos2d.h”
使用\u NS\u CC;
类HelloWorld:public cocos2d::Layer
{
公众:
静态cocos2d::场景*createScene();
虚拟bool init();
创建函数(HelloWorld);
};
//-----HelloWorldScene.cpp
#包括“HelloWorldScene.h”
#包括
#包括“敌人h”
使用\u NS\u CC;
场景*HelloWorld::CreateSecene()
{
自动场景=场景::创建();
自动图层=HelloWorld::create();
场景->添加子对象(层);
返回场景;
}
//在“init”中,您需要初始化实例
bool HelloWorld::init()
{
如果(!Layer::init())
返回false;
敌人*新敌人=敌人::创建();
//新敌人->设置健康(100);
此->addChild(新敌人);
返回true;
}
这可以很好地编译,但有两行注释会导致错误


请帮忙,提前谢谢

在不确切知道错误消息的情况下,您在敌方.cpp中的
setHealth
方法中似乎缺少类名

改变你敌人的方法声明

发件人:

致:

然后在您的敌人.cpp文件中更改以下内容

发件人:

致:


究竟是什么错误?.cpp中的“myHealth=newHealth;”返回错误“使用未声明的标识符‘myHealth’”,它告诉我,我在敌方类的私有部分中声明的myHealth是不可访问的。调用函数“newfriend->setHealth(100);”返回一个“clang:error:linker命令失败,退出代码为1”,这表明我没有使用正确的语法来调用敌方类中的函数。我只是把Objto-C语言转换成C++语法,但是体系结构不同,所以我不确定C++应该如何构造。非常感谢,我已经在这上面呆了两个小时了,只是做一些随机的事情,希望它能起作用:)
void setHealth(int val);
void setHealth(int newHealth);
void setHealth(int newHealth)
void Enemy::setHealth(int newHealth)