移动场景:SKAction 动画或更新方法中的锚点



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

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

  • 首先,我将整个场景放入一个节点中,即 MainNode。要切换从 A 到 B,只需将主节点位置设置为 (0, -320)。
  • 另一个解决方案,恕我直言(但不适用于使用 Coco2D 库的 LearnCoco2D),是将场景锚点移动到 (0, -1)

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

  • 通过使用 SKAction

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

  • 通过在update方法中对锚点进行动画处理

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

这两种解决方案有效(尽管线性SKAction::timeingMode无法正确呈现线性平移),但我想知道在优化和优雅方面哪个是最好的。欢迎提供文档;)

编辑:

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

简而言之,我的问题是:滚动场景的最佳实践到底是什么?

我很

惊讶(0,-1)没有抛出一个巨大的异常。根据文档,您可以获得从 0 到 1 的范围。这可能会导致将来出现问题。在此处查看文档

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

如果您要从一个屏幕到另一个屏幕来回走动很多次,这可能是一个不错的解决方案。但是,如果您希望将其缩放到更大的地图,您将多次过渡到新屏幕,我会推荐一种不同的方法。就像在需要时在屏幕上创建一个新节点并转换父节点然后弹出旧节点一样。

我希望这有所帮助。

编辑

现在的问题是"滚动场景的最佳实践到底是什么"。

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

  • 向场景中添加一个将处理定位的子节点(我们称之为mapNode)
  • 将代表场景的任何精灵添加到 mapNode
  • 更新时仅移动地图节点位置

过去,我以类似的方式构建场景,并根据更新循环中的玩家位置处理场景位置。当玩家在地图上走动时,我能够让他保持在屏幕中央。可能跑题了,但这是我根据经验发现处理滚动场景的最佳实践。我正在从事的项目可以在这里查看

我希望这能回答你的问题。

最新更新