不同的cclayer尺寸取决于块内引用的位置

Different CCLayer size depending on where it is referenced inside the block

本文关键字:引用 取决于 位置 cclayer      更新时间:2023-10-16

我对C 和cocos2d-X很新,所以答案可能很简单,但是对于我的生活,我不知道为什么它会这样。<<<<<<<<<<<</p>

以下是HelloWorldScene.cpp的相关片段,修改/简化的版本:

bool PlayGame::init()
{
    if ( !Layer::init() ) return false;
    double startX = this->getBoundingBox().getMidX() / 3;
    double startY = this->getBoundingBox().size.height * 0.95;
    Sprite* sprite = Sprite::create( "sprite.png" );
    sprite->setPosition( startX, startY );
    this->addChild( sprite );
    return true;
}

现在,我的代码按预期完美地工作,但是如果我要在之前定义 startXstartY 检查了CCLayer是否正确初始化的行,它们会返回 (0, 0)而不是在左上角中。我的猜测是,在if ( !Layer::init() )行之前,PlayGame层尚未初始化,因此大小为0

,但就我而言,该行仅负责检查该层是否在没有问题的情况下进行初始化,并且实际的初始化是由create()方法触发的,该方法在父级CCScene的定义内部触发。因此,我认为该层的大小应该在功能块内的任何地方初始化。

我在这里缺少什么?

createScene()中的 PlayGame::create()函数,在您的情况下看起来像这样

Scene* PlayGame::createScene()
{
    auto scene = Scene::create();
    auto layer = PlayGame::create();   // this one right here constructs the Layer and triggers PlayGame::init()
    scene->addChild(layer);
    return scene;
}

负责调用您的PlayGame::init()功能。但是,在设置或获取Layerinit()中的任何相关成员之前,必须明确调用静态Layer::init()

这是直接从库中提取的Layer::init()的实现

bool Layer::init()
{
    Director * director = Director::getInstance();
    setContentSize(director->getWinSize());    // this is the line that needs to be executed before you set anything
    return true;
}