【问题标题】:(Cocos2D) Sprite not perfectly sitting on top of other sprite?(Cocos2D) 精灵没有完美地坐在其他精灵之上?
【发布时间】:2011-12-21 04:54:33
【问题描述】:

我的应用中有一些很奇怪的地方。我一定看过这条线无数次,我发誓我看不出有什么问题。几乎只需点击一个按钮,这段代码就会被执行,并且精灵 A 应该位于精灵 B 的顶部。

不,我不能只对该位置执行 setPosition,因为在动画期间精灵 A 将与精灵 B 一起在其上方移动。

所以这里发生的情况是,精灵 A 最终比精灵 B 的顶部高了 30 像素。我不知道这是为什么。 这是我的代码:

spriteA.position = ccp(cgpoint.x , spriteB.position.y + spriteB.boundingBox.size.height/2 + spriteA.contentSize.height/2);

所以这里发生的事情是我将 sprite A 的 X 位置设置为与此问题无关的 CGPoint,但我将 Y 位置设置为 spriteB 所在的当前位置,然后我将 spriteB 的一半高度添加到帐户对于锚点问题,最后,我添加了 spriteA 的一半高度,以便在动画期间它应该完美地位于 spriteB 的顶部。

这有什么原因不能按我的意愿工作吗?

谢谢!

【问题讨论】:

    标签: ios animation cocos2d-iphone ccsprite


    【解决方案1】:

    你为一个精灵使用boundingBox,为另一个精灵使用contentSize:

    spriteB.boundingBox.size.height/2 + spriteA.contentSize.height/2
    

    你的 spriteA 是否被缩小了?

    【讨论】:

    • 是的,那是我的问题!不敢相信我以前没见过! :)
    【解决方案2】:

    如果你想设置 B 精灵的 A 顶部,你应该注意精灵的 z 顺序。如果 A 有更多的 z 值,当 A 和 B 具有相同的位置和锚点时,A 将位于 B 的顶部。

    添加孩子的时候可以设置z值如下:

    [self addChild:spriteA z:1 tag:<tagValue int>];
    [self addChild:spriteB z:0 tag:<tagValue int>];
    

    【讨论】:

    • Z 值不是问题。它与精灵的定位有关。它应该看起来像精灵 B 位于精灵 A 的顶部。
    • 你在 B Sprite 上运行一些动作吗?如果是,请在定位之前停止它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多