2017-03-06 41 views
1

我對C++和cocos2d-x很新穎,所以答案可能非常簡單,但對於我的生活,我無法弄清楚爲什麼它的行爲喜歡這個。不同的CCLayer大小取決於它在塊內引用的位置

下面是相關的片斷,修改/簡化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),而不是左上角的somehwere。我的猜測是,在行if (!Layer::init())之前,PlayGame圖層尚未初始化,因此其大小爲0

但是就我而言,該行只負責檢查圖層是否已經初始化,沒有問題,並且實際的初始化由在父級CCScene的定義中調用的create()方法觸發。所以我認爲圖層的大小應該已經在函數塊內的任何地方初始化了。

我在這裏錯過了什麼?

回答

0

PlayGame::create()功能createScene(),這將是這個樣子,你的情況

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()功能。但是,在設置或獲取init()中的任何Layer相關成員之前,必須明確調用設置內容大小的靜態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; 
} 
相關問題