0

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

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

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

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

  • 通过使用 SKAction

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

  • 通过在update方法中为 anchorPoint 设置动画

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

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

编辑:

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

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

4

1 回答 1

2

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

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

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

我希望这会有所帮助。

编辑

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

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

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

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

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

于 2015-01-31T19:46:42.573 回答