如何制作可以包含在 HelloWorld.cpp in cocos2d-x 中的 Layer 文件...?
how to make a Layer file that can be included in HelloWorld.cpp in cocos2d-x ...?
我想在 HelloWorldScene.cpp 中安排许多图层,方法是将每个图层制作成 cpp 文件。但是我不知道如何开始编写头文件以及如何将它们包含在 HelloWorld.cpp 中,尽管我在 Google & StakOverflow 上搜索了几天。为了解释我想做什么,我做了一个下面的简单示例。我这里只加了2层,但是1个场景会有20多个层,所以我想把它们都做成一个文件。
HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(HelloWorld);
cocos2d::Layer* layer01;
cocos2d::Layer* layer02;
int GrossiniPops;
cocos2d::Sprite* pMan;
virtual void getTouched01();
virtual void closingLayer();
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp
#include "HelloWorldScene.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
layer01 = Layer::create();
this->addChild(layer01);
layer02 = LayerColor::create(Color4B::WHITE);
this->addChild(layer02);
layer02->setVisible(false);
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto btn01 = cocos2d::ui::Button::create();
btn01->loadTextures("images/moveBar.png","","");
btn01->addTouchEventListener(CC_CALLBACK_0(HelloWorld::getTouched01, this));
btn01->setPosition(Point(275,250));
layer01->addChild(btn01);
auto btn02 = cocos2d::ui::Button::create();
btn02->loadTextures("images/moveBar.png", "", "");
btn02->addClickEventListener(CC_CALLBACK_0(HelloWorld::closingLayer, this));
btn02->setPosition(Point(375, 250));
this->addChild(btn02, 3);
GrossiniPops = 0;
pMan = Sprite::create("images/grossini.png");
pMan->setPosition(Point(325, 150));
layer01->addChild(pMan);
pMan->setVisible(false);
return true;
}
void HelloWorld::getTouched01()
{
GrossiniPops++;
if (GrossiniPops%4==2) {
pMan->setVisible(true);
}
else { pMan->setVisible(false); }
}
void HelloWorld::closingLayer()
{
log("Layer Change");
if (layer01->isVisible()==true)
{
layer01->setVisible(false);
layer02->setVisible(true);
}
else {
layer02->setVisible(false);
layer01->setVisible(true);
}
}
如果您想使用 "HelloWorld.h" 文件,您需要将其包含在 "HelloWorld.cpp" 文件中。将此行放在 "HelloWorld.cpp" 文件的顶部:
#include "HelloWorld.h"
应该可以解决。
如果您想阅读更多有关 C++ 中的包含文件和源文件的信息,这里有一个很好的参考:
我想在 HelloWorldScene.cpp 中安排许多图层,方法是将每个图层制作成 cpp 文件。但是我不知道如何开始编写头文件以及如何将它们包含在 HelloWorld.cpp 中,尽管我在 Google & StakOverflow 上搜索了几天。为了解释我想做什么,我做了一个下面的简单示例。我这里只加了2层,但是1个场景会有20多个层,所以我想把它们都做成一个文件。
HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(HelloWorld);
cocos2d::Layer* layer01;
cocos2d::Layer* layer02;
int GrossiniPops;
cocos2d::Sprite* pMan;
virtual void getTouched01();
virtual void closingLayer();
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp
#include "HelloWorldScene.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
layer01 = Layer::create();
this->addChild(layer01);
layer02 = LayerColor::create(Color4B::WHITE);
this->addChild(layer02);
layer02->setVisible(false);
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto btn01 = cocos2d::ui::Button::create();
btn01->loadTextures("images/moveBar.png","","");
btn01->addTouchEventListener(CC_CALLBACK_0(HelloWorld::getTouched01, this));
btn01->setPosition(Point(275,250));
layer01->addChild(btn01);
auto btn02 = cocos2d::ui::Button::create();
btn02->loadTextures("images/moveBar.png", "", "");
btn02->addClickEventListener(CC_CALLBACK_0(HelloWorld::closingLayer, this));
btn02->setPosition(Point(375, 250));
this->addChild(btn02, 3);
GrossiniPops = 0;
pMan = Sprite::create("images/grossini.png");
pMan->setPosition(Point(325, 150));
layer01->addChild(pMan);
pMan->setVisible(false);
return true;
}
void HelloWorld::getTouched01()
{
GrossiniPops++;
if (GrossiniPops%4==2) {
pMan->setVisible(true);
}
else { pMan->setVisible(false); }
}
void HelloWorld::closingLayer()
{
log("Layer Change");
if (layer01->isVisible()==true)
{
layer01->setVisible(false);
layer02->setVisible(true);
}
else {
layer02->setVisible(false);
layer01->setVisible(true);
}
}
如果您想使用 "HelloWorld.h" 文件,您需要将其包含在 "HelloWorld.cpp" 文件中。将此行放在 "HelloWorld.cpp" 文件的顶部:
#include "HelloWorld.h"
应该可以解决。
如果您想阅读更多有关 C++ 中的包含文件和源文件的信息,这里有一个很好的参考: