移动场景:更新方法中的 SKAction 动画或锚点?
Moving the scene: SKAction animation or anchorPoint in update method?
我的游戏基于并排的两个屏幕(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
方法中的动画锚点
if(anchorY > -1) anchorY -= 0.1;
这两个解决方案有效(尽管线性 SKAction::timingMode 无法正确呈现线性翻译),但我想知道在优化和优雅方面哪个是最好的。欢迎文档 ;)
编辑:
显然,我的问题并不清楚(可能是因为我的英语水平)。
简而言之,我的问题是:滚动场景的最佳实践到底是什么?
我很惊讶 (0, -1) 没有抛出巨大的异常。根据文档,您得到的范围是 0 到 1。这可能会在将来引起问题。请参阅文档 here
改变你的立场听起来是一种更优雅的处理方式。然而,在 1/10 秒的跨度内将它变为负 -320 是相当快的,并且可以解释为什么它看起来很有趣。另外,如果你不确定你只调用一次它看起来真的很奇怪。我会确保它只被调用一次,如果它应该移动而不是检查位置,可能会使用 bool 来切换。
如果您经常在一个屏幕和另一个屏幕之间来回切换,这可能是一个不错的解决方案。但是,如果您希望将其缩放到更大的地图,您将在其中多次过渡到新屏幕,我会推荐一种不同的方法。就像在需要时在屏幕外创建一个新节点并转换父节点然后弹出旧节点一样。
希望对您有所帮助。
编辑
现在的问题是"what exactly are the best practices for scrolling a scene"。
我会推荐评论中提到的 LearnCoco2D 以及我在原始答案中回避的内容。
- 向您的场景添加一个子节点来处理定位(我们称之为 mapNode)
- 将代表场景的任何精灵添加到地图节点
- 更新时仅移动 MapNode 位置
过去,我以类似的方式构建场景,并根据玩家在更新循环中的位置处理场景位置。当玩家在地图上四处走动时,我能够将玩家保持在屏幕中央。可能会偏离主题,但这是我从我的经验中找到的处理滚动场景的最佳实践。我正在做的项目可以查看here
我希望这能回答你的问题。
我的游戏基于并排的两个屏幕(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
方法中的动画锚点if(anchorY > -1) anchorY -= 0.1;
这两个解决方案有效(尽管线性 SKAction::timingMode 无法正确呈现线性翻译),但我想知道在优化和优雅方面哪个是最好的。欢迎文档 ;)
编辑:
显然,我的问题并不清楚(可能是因为我的英语水平)。
简而言之,我的问题是:滚动场景的最佳实践到底是什么?
我很惊讶 (0, -1) 没有抛出巨大的异常。根据文档,您得到的范围是 0 到 1。这可能会在将来引起问题。请参阅文档 here
改变你的立场听起来是一种更优雅的处理方式。然而,在 1/10 秒的跨度内将它变为负 -320 是相当快的,并且可以解释为什么它看起来很有趣。另外,如果你不确定你只调用一次它看起来真的很奇怪。我会确保它只被调用一次,如果它应该移动而不是检查位置,可能会使用 bool 来切换。
如果您经常在一个屏幕和另一个屏幕之间来回切换,这可能是一个不错的解决方案。但是,如果您希望将其缩放到更大的地图,您将在其中多次过渡到新屏幕,我会推荐一种不同的方法。就像在需要时在屏幕外创建一个新节点并转换父节点然后弹出旧节点一样。
希望对您有所帮助。
编辑
现在的问题是"what exactly are the best practices for scrolling a scene"。
我会推荐评论中提到的 LearnCoco2D 以及我在原始答案中回避的内容。
- 向您的场景添加一个子节点来处理定位(我们称之为 mapNode)
- 将代表场景的任何精灵添加到地图节点
- 更新时仅移动 MapNode 位置
过去,我以类似的方式构建场景,并根据玩家在更新循环中的位置处理场景位置。当玩家在地图上四处走动时,我能够将玩家保持在屏幕中央。可能会偏离主题,但这是我从我的经验中找到的处理滚动场景的最佳实践。我正在做的项目可以查看here
我希望这能回答你的问题。