图层不会在另一个图层中绘制

时间:2018-05-05 15:53:12

标签: c++ drawing cocos2d-x

我正在尝试制作类似自定义消息框的内容,但MB层不希望显示在主图层上(实际上是场景)。我用2个文本框实现了非常基本的Layer(cocos2d :: Layer)。我正在通过

将它添加到场景中
this->addChild(layer);

但实际上什么都没有显示出来。我通过AudioEngine添加了音乐并播放,但我仍然没有在主场景中看到任何内容。 Cocos2d-x版本是3.16(最新版),我也在win32上使用最新的MSVC。

1 个答案:

答案 0 :(得分:0)

您需要在场景中添加一个图层作为子图层,然后在图层中添加精灵或其他节点。例如,创建测试场景HelloWorld继承自cocos2d :: Layer:

class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
//...

然后使用工厂方法将场景创建定义为:

Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();

    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

在init方法中尝试将您的简单对象添加到继承自cocos2d :: Layer的HelloWorld,而Layer是cocos2d :: Scene的子项:

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }

    auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);

    // position the label on the center of the screen
    label->setPosition(Vec2(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(label, 1);

完成所有这些步骤后,从导演处运行此场景:

//...
// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene();

// run
director->runWithScene(scene);
//...