2017-05-07 1 views
0

Derzeit versuche ich, Menü (MenuItemImage) in cocos2dx anzuzeigen, es wird jedoch nicht angezeigt. Der Sprite zeigt normal. Ich habe gegoogelt, aber keine Lösung. Ich würde gerne einige Tipps oder Beispiele von Ihnen haben!Menü MenuItemImage in cocos2dx kann nicht angezeigt werden

bool GameLayer::init(int level) 
{ 
    if (!Layer::init()) 
     return false; 

    auto moreButton = MenuItemImage::create("more.png","more.png",[](Ref*sender){}); 
    moreButton->setPosition(Vec2(WINSIZE.width /2.0,WINSIZE.height/2.0)); 

    this->addChild(moreButton, ZOrder::Enemy); 

    auto menu = Menu::create(moreButton, NULL); 
    this->addChild(menu); 
    menu->setPosition(WINSIZE.width/2.0, WINSIZE.height/2.0); 

    initBackground(); 
    return true; 
} 


void GameLayer::initBackground() 
{ 
    auto bgForCharacter = Sprite::create("Background1.png"); 
    bgForCharacter->setAnchorPoint(Point(0, 1)); 
    bgForCharacter->setPosition(Point(0, WINSIZE.height)); 
    addChild(bgForCharacter, ZOrder::BgForCharacter); 

    auto bgForPuzzle = Sprite::create("Background2.png"); 
    bgForPuzzle->setAnchorPoint(Point::ZERO); 
    bgForPuzzle->setPosition(Point::ZERO); 
    addChild(bgForPuzzle, ZOrder::BgForP); 
    //TODO 
} 

Das Folgende ist in der Header-Klasse.

enum ZOrder 
    { 
     BgForCharacter = 0, 
     BgForPuzzle, 
     Enemy, 
     EnemyHp, 
     Char, 
     CharHp, 
     Ball, 
     Level, 
     Result, 
    }; 
+0

Was ist der Wert von 'WINSIZE'? – Aryan

+0

Es ist "#define WINSIZE Director :: getInstance() -> getWinSize()" – user3264924

Antwort

1

Sie können Menu als Container oder ein Elternteil von einem anderen Typ von MenuItem nehmen. Keine Notwendigkeit, die Position MenuItem zu setzen, wenn Sie ein einzelnes MenuItem haben, legen Sie die Position des übergeordneten Elements fest (Menü).

hinzufügen Nicht MenuItem zu Scene oder Layer, geben Sie einfach in create() Methode von Menu. Wenn Sie die create-Methode übergeben, wird sie der Menu als untergeordnetes Element hinzugefügt.

bool GameLayer::init(int level) 
{ 
    if (!Layer::init()) 
     return false; 

    auto moreButton = MenuItemImage::create("more.png","more.png",[](Ref*sender){}); 

    auto menu = Menu::create(moreButton, NULL);   
    menu->setPosition(WINSIZE.width/2.0, WINSIZE.height/2.0); 
    this->addChild(menu); 

    initBackground(); 
    return true; 
} 

Wenn Sie mehr als ein MenuItem in einem Menu haben, dann müssen wir Position jedes MenuItem einzustellen.

MenuItem Position seiner Eltern Menü entspricht so ganz nach Ihrem Code, den Sie Menü in der Mitte des Bildschirm gesetzt und legen Sie gleich sein Kind versetzt, so MenuItem oben rechts geht (nicht sichtbar.)

+0

Ich habe den Code aktualisiert. Das Menü wird nicht angezeigt. Vielleicht wegen der ZOrder, die ich anderen Sprites hinzugefügt habe? – user3264924

+0

Ihr Code gibt mir Laufzeit Ausnahme bei 'auto menu = Menü :: create (moreButton, NULL);' weil moreButton bereits hinzugefügt. Es kann nicht erneut hinzugefügt werden. – Aryan

+0

Welche Version von cocos2d-x verwenden Sie? Ich benutze v3.15 – Aryan