Я знаю, что это очень старый вопрос, но я просто хотел поделиться здесь тем, что со мной произошло (надеюсь, это полезно).У меня была та же самая проблема, описанная в этом вопросе, и, как сказал @mokagio выше, проблема в том, как работает система меню coodinate.
Сначала я создал Sprite и MenuItemSprite, но никогда не мограсположите их правильно.Тогда я понял, что мне нужно делать все масштабирование и позиционирование на основе MenuItemSprite, а не в Sprite, и все работало нормально!
Я использовал следующий код:
CCPoint backButtonPosition;
CCSprite *backButtonSprite = CCSprite::createWithSpriteFrameName("Back.png");
CCMenuItemSprite *backButton = CCMenuItemSprite::create(backButtonSprite, backButtonSprite, this, menu_selector(MyMenuClass::buttonPressedCallback));
// Do all the scaling and positioning using the CCMenuItemSprite and not the CCSprite
backButton->setScale(0.5);
backButtonPosition = ccp(backButton->boundingBox().size.width / 2, screenSize.height - backButton->boundingBox().size.height / 2);
// Position the button, but first convert the world coordinates to the parent menu local coordinates
backButton->setPosition(categorySelectMenu->convertToNodeSpace(backButtonPosition));
categorySelectMenu->addChild(backButton);
Также, пожалуйста,обратите внимание, что важно установить положение кнопки в соответствии с системой координат меню, а не с мировой системой координат.