Cocos2d,CCMenuSprite,缩放和定位问题

时间:2011-08-12 08:13:21

标签: ios cocos2d-iphone positioning scale

我无法弄清楚如何在场景中正确定位一些使用缩放精灵创建的菜单按钮。

如果我创建精灵,缩放它们并设置它们的位置,那一切都很顺利。

如果我创建精灵,缩放它们,设置它们的位置然后用它们来创建CCMenuItemSprite它们都是左右移动。

如果我创建了精灵,请使用它们来创建CCMenuItemSprite,缩放菜单项并设置菜单项位置,它们都会向右和向上移动。

当然,所有这些设置都使用相同的比例因子和中心点坐标。

我错过了什么?

谢谢!

编辑:已解决!!

我明白了!这完全取决于菜单的坐标系如何工作以及菜单缩放时的反应方式。

我现在还不知道我正在对这个问题采取一种非正确的方法,这是非常可能的,或者如果对所有系统的思考方式都有一些棘手的问题。

我会尽快写一篇小教程。

再次感谢:D

1 个答案:

答案 0 :(得分:0)

我知道这是一个非常古老的问题,但我只想分享我在这里发生的事情(我希望它有所帮助)。我刚才遇到了这个问题中描述的相同问题,而@mokagio上面说的问题是菜单的协调系统是如何工作的。

首先我用它创建了一个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);

另外,请注意,根据菜单坐标系设置按钮位置非常重要,而不是世界坐标系。