0

考虑一下:您在 Cocos2D 2.0 上创建了一个新项目。您拥有传统的 Helloworld 层。您使用以下结构向其添加层:

Helloworld (cclayer)
   │
   ┕━ baseLayer (cclayer)
        │
        ┕━ myReducedNode [CCSprite node]
              │
              ┕━ myFullSprite (ccsprite)
                    │
                    ┕━ smallSprite (ccsprite)
  • myReducedNode 是 baseLayer 中的一个节点,使用 [CCSprite 节点] 创建并应用了比例尺,因此,当我应用该比例尺时,我同时减少了 myFullSprite 和所有 smallSprites。
  • myFullSprite 是 myReducedNode 内的 1024x768 点精灵。
  • smallSprites 是 myFullSprite 中的 230x348 点精灵。

考虑一下这种疯狂:

  • 首先,我将 1 的比例应用于 myReducedNode。当我拖动 smallSprite 并检查它的坐标时,一切都很好。如果我将 smallSprite 定位在 myFullSprite 的左上角,我将 smallSprite 的中心坐标读取为 (115,594),这是正确的值。
  • 我将 0.8 比例应用于 myReducedNode。将 smallSprite 拖到 myFullSprite 的左上角,cocos 现在报告 smallSprite 的中心为 (17,641) ?????????!!!!!!

我说的是局部坐标,我的意思是,smallSprite 的位置在 myFullSprite 内部。

这是什么原因造成的?这个数字没有明显的逻辑......这个数字与应用于顶部节点的比例无关。

我在这里想念什么?我在墙上敲了几天的头,试图弄清楚这个谜题!!!!谢谢。


更多信息。我希望这有助于弄清楚为什么坐标有这些值......

  • baseLayer 在 Helloworld 上的位置是 (612, 389)。
  • myReducedNode 在 baseLayer 上的位置是 (0,0)。
  • myFullSprite 在 myReducedNode 上的位置是 (0,0)
4

3 回答 3

0

我认为您应该看一下convertToWorldSpace:,因为您正在缩放和嵌套事物,所以转换很可能适用于这些坐标。

在这里你有一个可能有用的问题和 cocos2d上的这篇文章

于 2012-07-19T17:29:24.263 回答
0

试试这个:

CGPoint smallSpriteLocalPosition;
smallSpriteLocalPosition = 
[smallSprite.parent convertToNodeSpace:smallSprite.position];

然后打印出这些坐标,看看它们是否正确注册。这应该为您提供 smallSprite 相对于其父级 fullSprite 的节点(本地)坐标。您还应该能够 convertToWorldSpace 以获取窗口范围内的坐标。

这就是过去在处理子精灵时对我有用的方法;这可能有点棘手。确保在转换调用中使用正确的变量,否则您将无法获得正确的数据。让我知道这是否有效,因为我还没有尝试过三层深的层。

于 2012-07-20T01:24:30.663 回答
0

经过一些代码更改和几天的研究和尝试,我得出结论这是 Cocos2D 的一个错误,或者层、精灵和节点的工作方式之间缺乏一致性(正如 LearnCocos2d 所建议的那样),因为没有办法解释获得的值。我将尝试对此填写错误报告。

于 2012-07-21T17:35:32.787 回答