在CCMenu中将WorldSpace转换为菜单项的奇怪行为

时间:2013-08-17 22:51:11

标签: cocos2d-iphone cocos2d-html5

我有一个附加到图层的菜单。在菜单中4个项目垂直对齐。我以这种方式取消菜单(警告!这是Javascript。使用COCOS2D-Html5,框架与iphone相同):

        menuHeight = sumofMenuItemsHeight(CategoryMiniSpriteArray);
        var newMenu = cc.Menu.create(CategoryMiniSpriteArray);

        newMenu.setAnchorPoint(cc.PointMake(1,1));
        newMenu.setPosition(cc.PointMake( 
                            ScreenSize.width, ScreenSize.height - (menuHeight / 2)
                            ));
        newMenu.alignItemsVertically();

之后在程序中的某个时刻我想获得相对于屏幕的菜单项的绝对坐标。 我执行这段代码:

var itemPosition = miniSprite.convertToWorldSpace(miniSprite.getPosition());

我的行为非常奇怪。返回的X坐标与实际位置完全匹配。如果我试着这样:

sprite.setPosition(itemPosition);

该坐标X的另一个精灵与菜单项完全对齐。 问题是Y.对于每个MenuItem,我得到一个移位的Y,但这不是全部。菜单项之间的Y差异是菜单项高度的2倍。所以不仅改变了Y,甚至在项目之间切换。我做错了什么?这不是世界空间。

1 个答案:

答案 0 :(得分:0)

所以问题是我以错误的方式调用convertToWorldSpace:

var itemPosition = miniSprite.convertToWorldSpace(miniSprite.getPosition());

应该是:

var itemPosition = miniSprite.getParent().convertToWorldSpace(miniSprite.getPosition());

我需要从CCMenu调用convertToWorldSpace。来自父母,而不是来自孩子。