Cocos2d, CCMenuSprite, проблема масштабирования и позиционирования - PullRequest
2 голосов
/ 12 августа 2011

Я не могу понять, как правильно расположить в сцене некоторые кнопки меню, созданные с масштабированными спрайтами.

Если я создаю спрайты, масштабирую их и устанавливаю их положение, все будет хорошо.

Если я создаю спрайты, масштабирую их, устанавливаю их положение, а затем использую их для создания CCMenuItemSprite, все они сдвигаются влево и вниз.

Если я создаю спрайты, используйте их для созданияCCMenuItemSprite, масштабируйте элемент меню и устанавливайте положение элементов меню, все они сдвигаются вправо и вверх.

Все эти настройки выполняются с одинаковым масштабным коэффициентом и координатами центральной точки.

Чего мне не хватает ??

Спасибо!

РЕДАКТИРОВАТЬ: РЕШЕНО !!

Я понял это !!Все это было связано с тем, как работает система координат меню и как она реагирует при масштабировании меню.

Я не знаю сейчас, что я использовал неправильный подход к проблеме, котораяочень возможно, или если есть что-то хитрое в том, как вся система мыслится.

Я углублюсь в это и напишу небольшой учебник как можно скорее.

Еще раз спасибо: D

1 Ответ

0 голосов
/ 30 июля 2014

Я знаю, что это очень старый вопрос, но я просто хотел поделиться здесь тем, что со мной произошло (надеюсь, это полезно).У меня была та же самая проблема, описанная в этом вопросе, и, как сказал @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);

Также, пожалуйста,обратите внимание, что важно установить положение кнопки в соответствии с системой координат меню, а не с мировой системой координат.

...