Ios 移动场景:SKAction动画还是更新方法中的主播点?

Ios 移动场景:SKAction动画还是更新方法中的主播点?,ios,sprite-kit,anchorpoint,Ios,Sprite Kit,Anchorpoint,我的游戏基于并排的两个屏幕(A和B),但设备屏幕一次只能显示其中一个。 例如,A位于位置(0,0),B位于位置(320,0) 我尝试了两种从A切换到B的解决方案: 首先,我将整个场景放在一个节点中,即主节点。转换 从A到B,只需将主节点位置设置为(0,-320) 另一个解决方案,更优雅的IMHO(但不适用于使用Coco2D库的用户),是将场景主播点移动到(0,-1) 现在,如果我想通过动画从A转到B,必须调整以下两种解决方案: 通过使用一个动作 [主运行动作:[SKAction-moveT

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

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

  • 首先,我将整个场景放在一个节点中,即主节点。转换 从A到B,只需将主节点位置设置为(0,-320)
  • 另一个解决方案,更优雅的IMHO(但不适用于使用Coco2D库的用户),是将场景主播点移动到(0,-1)
现在,如果我想通过动画从A转到B,必须调整以下两种解决方案:

  • 通过使用一个动作

    [主运行动作:[SKAction-moveToY:-320持续时间:0.1]]

  • 通过在
    update
    方法中设置锚点动画

    如果(anchorY>-1)anchorY-=0.1

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

编辑:

显然,我的问题不清楚(可能是因为我的英语水平)

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

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

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

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

我希望这有帮助

编辑

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

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

  • 向场景中添加一个子节点以处理定位(我们称之为mapNode)
  • 将表示场景的任何精灵添加到mapNode
  • 更新时仅移动MapNode位置
在过去,我以类似的方式构建场景,并根据更新循环中的玩家位置处理场景位置。当玩家在地图上走动时,我能够让他保持在屏幕中央。可能会偏离主题,但根据我的经验,这是处理滚动场景的最佳实践。可以查看我正在处理的项目


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

这里的问题到底是什么?嗯。。。问题可能是“滚动地图的最佳实践是什么”。在不同大小的屏幕/手机上测试它们,看看它们在不断变化的场景大小下的表现。我认为最安全的方法是把你需要移动的所有东西放在场景的子节点中,然后改变子节点的位置。更改Anchorpoint可能会产生不必要的副作用。没有明确提到Anchorpoint在[0 1]范围内是Apple doc。是的,图表确实显示了0,0到1,1,但没有说明必须这样做。你的问题不清楚,我试着帮你回答。你的问题到底是什么?两个人说“问题是什么”,也许问题不清楚:)我编辑了我的问题。谢谢你的更新。你在描述我问题中的第一种方法,除非你在
update
方法中更新你的地图位置(因为你的地图是动态移动的)。然而,我现在不接受你的回答,因为我想得到其他的建议+无论如何,我接受这个答案,因为我的问题没有具体要求,但我希望得到更多的反馈。