如何在 cocos2d-x 中创建自定义创建函数
How to Create the Custom create function in cocos2d-x
我想更改创建功能
避免使用全局变量。
我想在通话时传递我的价值观(例如分数)
并创建其他场景。我发现的一种方法是
全局变量在创建函数中的使用
但我想在不使用全局的情况下使用这些值
变量。请尽快回复我,我是 cocos2d-x 的新人。
还有告诉我有没有其他方法。
我个人使用这两种方法......所以选择最适合你的!
以这个 ScoreScene class 及其创建方式为例。
1)- 方法一
class ScoreScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene(bool won, int score) {
auto scene = Scene::create();
auto layer = ScoreScene::create(won, score);
scene->addChild(layer);
return scene;
}
static ScoreScene* create(bool won, int score) {
ScoreScene *layer = new(std::nothrow) ScoreScene;
if (layer)
{
layer->isWinner = won;
layer->m_score = score;
if (layer->init())
{
layer->autorelease();
return layer;
}
}
CC_SAFE_DELETE(layer);
return nullptr;
}
bool init() override {
if(!layer->init()) return;
// initialization code here
return true;
}
private:
// your properties
int m_score;
bool isWinner;
};
1)- 方法二(个人首选)
只创建一个方法,即 createScene 而不是两个。
class ScoreScene : public cocos2d::Layer
{
public:
cocos2d::Scene* ScoreScene::createScene(bool won, int score)
{
ScoreScene *layer = new(std::nothrow) ScoreScene;
if (layer)
{
layer->isWinner = won;
layer->m_score = score;
if (layer->init())
{
auto scene = Scene::create();
layer->autorelease();
scene->addChild(layer);
return scene;
}
}
CC_SAFE_DELETE(layer);
return nullptr;
}
bool init() override {
if(!layer->init()) return;
// initialization code here
return true;
}
private:
// your properties
int m_score;
bool isWinner;
};
我用了同样的方法但是谢谢你的回答..
cocos2d::Scene* GameOverScene::createScene(unsigned int tempscoree)
{
GameOverScene *pRet = new(std::nothrow) GameOverScene();
if (pRet && pRet->init(tempscoree))
{
auto scene = Scene::create();
pRet->autorelease();
scene->addChild(pRet);
return scene;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
bool GameOverScene::init(unsigned int tempScore)
{
if ( !Layer::init() )
{
return false;
}
//Now i can use tempScore any where in to this init() method.
}
我想更改创建功能 避免使用全局变量。 我想在通话时传递我的价值观(例如分数) 并创建其他场景。我发现的一种方法是 全局变量在创建函数中的使用 但我想在不使用全局的情况下使用这些值 变量。请尽快回复我,我是 cocos2d-x 的新人。 还有告诉我有没有其他方法。
我个人使用这两种方法......所以选择最适合你的!
以这个 ScoreScene class 及其创建方式为例。
1)- 方法一
class ScoreScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene(bool won, int score) {
auto scene = Scene::create();
auto layer = ScoreScene::create(won, score);
scene->addChild(layer);
return scene;
}
static ScoreScene* create(bool won, int score) {
ScoreScene *layer = new(std::nothrow) ScoreScene;
if (layer)
{
layer->isWinner = won;
layer->m_score = score;
if (layer->init())
{
layer->autorelease();
return layer;
}
}
CC_SAFE_DELETE(layer);
return nullptr;
}
bool init() override {
if(!layer->init()) return;
// initialization code here
return true;
}
private:
// your properties
int m_score;
bool isWinner;
};
1)- 方法二(个人首选)
只创建一个方法,即 createScene 而不是两个。
class ScoreScene : public cocos2d::Layer
{
public:
cocos2d::Scene* ScoreScene::createScene(bool won, int score)
{
ScoreScene *layer = new(std::nothrow) ScoreScene;
if (layer)
{
layer->isWinner = won;
layer->m_score = score;
if (layer->init())
{
auto scene = Scene::create();
layer->autorelease();
scene->addChild(layer);
return scene;
}
}
CC_SAFE_DELETE(layer);
return nullptr;
}
bool init() override {
if(!layer->init()) return;
// initialization code here
return true;
}
private:
// your properties
int m_score;
bool isWinner;
};
我用了同样的方法但是谢谢你的回答..
cocos2d::Scene* GameOverScene::createScene(unsigned int tempscoree)
{
GameOverScene *pRet = new(std::nothrow) GameOverScene();
if (pRet && pRet->init(tempscoree))
{
auto scene = Scene::create();
pRet->autorelease();
scene->addChild(pRet);
return scene;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
bool GameOverScene::init(unsigned int tempScore)
{
if ( !Layer::init() )
{
return false;
}
//Now i can use tempScore any where in to this init() method.
}