移动场景:更新方法中的SKAction动画或anchorPoint?

时间:2015-01-31 19:19:18

标签: ios sprite-kit anchorpoint

我的游戏基于两个屏幕(A& B)并排,但设备屏幕一次只能显示其中一个。
A例如在位置(0,0)并且B在(320,0)

我尝试了两种解决方案,从A切换到B:

  • 首先,我将整个场景放入一个节点MainNode。换成 从A到B,只需将MainNode位置设置为(0,-320)。
  • 其他解决方案,更优雅的恕我直言(但不适用于使用Coco2D库的LearnCoco2D),是将场景anchorPoint移动到(0,-1)

现在,如果我想通过动画从A到B,那么必须调整这两个解决方案:

  • 使用SKAction

    [Main runAction:[SKAction moveToY:-320 duration:0.1]];

  • 通过update方法

    中的anchorPoint制作动画

    if(anchorY > -1) anchorY -= 0.1;

这两个解决方案有效(尽管线性SKAction :: timingMode不能正确渲染线性平移),但我想知道哪个是优化和优雅方面最好的。欢迎提供文件;)

编辑:

显然,我的问题不明确(可能是由于我的英语水平)。

简而言之,我的问题是:滚动场景的最佳做法究竟是什么?

1 个答案:

答案 0 :(得分:2)

我很惊讶(0,-1)并没有引发一个巨大的异常。根据文档,您可以获得从0到1的范围。这可能会在将来引发问题。请参阅文档here

改变你的位置听起来像是一种更优雅的处理方式。然而,在十分之一秒的时间内将其改为负-320是相当快的,并且可以解释为什么它看起来很有趣。此外,如果你不确定你只是打电话,一旦看起来很奇怪。我会确保它只被调用一次并且可能使用bool来切换它是否应该移动而不是检查位置。

如果你要从一个屏幕到另一个屏幕来回走动,这可能是一个不错的解决方案。但是,如果您希望将其扩展为更大的地图,您将要多次转换到新的屏幕,我会建议采用不同的方法。就像在需要时在屏幕外创建新​​节点并转换父节点一样,然后关闭旧节点。

我希望有所帮助。

修改

现在问题是"什么是滚动场景的最佳做法"。

我会推荐评论中提到的LearnCoco2D以及我在原始答案中所提到的内容。

  • 在场景中添加一个子节点,用于处理定位(让我们称之为mapNode)
  • 将代表场景的所有精灵添加到mapNode
  • 仅在更新
  • 上移动MapNode位置

过去我以类似的方式构建了我的场景,并根据更新循环中的玩家位置处理了场景位置。当他在地图上走动时,我能够将玩家保持在屏幕的中心位置。可能会离开主题,但这是我找到处理从我的经验滚动场景的最佳实践。我正在处理的项目可以查看here

我希望能回答你的问题。