Cocos2D 2.0 - 试图通过图层和精灵来理解这个难题

时间:2012-07-19 17:07:40

标签: cocos2d-iphone

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

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

考虑一下这种疯狂:

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

我说的是本地坐标,我的意思是,smallSprite的位置在myFullSprite中。

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

我在这里缺少什么?我在墙上撞了好几天,试图弄清楚这个难题!感谢。


更多信息。我希望这有助于找出坐标具有这些值的原因......

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

3 个答案:

答案 0 :(得分:0)

我认为你应该看看convertToWorldSpace:,因为你正在缩放和嵌套事物,转换很可能适用于那些坐标。

这里有一个可能有用的question,而且post on cocos2d也是

答案 1 :(得分:0)

试试这个:

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

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

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

答案 2 :(得分:0)

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