Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 斯普林泰诺德-斯威夫特之间出现的维尔德缺口_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 斯普林泰诺德-斯威夫特之间出现的维尔德缺口

Ios 斯普林泰诺德-斯威夫特之间出现的维尔德缺口,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,注意:我尝试过这个答案: 在让我的比赛进行了5分钟后,我在我的斯普瑞特诺德之间有了差距。以下是创建节点的代码: let tileNode = SKSpriteNode(imageNamed: "world1Tile\(tileNumber).png") tileNode.position.x = x tileNode.position.y = y tileNode.size.width = 128 tileNode.size.height = 128 tileNode.zPosition = 1

注意:我尝试过这个答案:

在让我的比赛进行了5分钟后,我在我的斯普瑞特诺德之间有了差距。以下是创建节点的代码:

let tileNode = SKSpriteNode(imageNamed: "world1Tile\(tileNumber).png")
tileNode.position.x = x
tileNode.position.y = y
tileNode.size.width = 128
tileNode.size.height = 128
tileNode.zPosition = 10
tileNode.physicsBody = SKPhysicsBody(rectangleOf: tileNode.size)
tileNode.physicsBody!.isDynamic = false
tileNode.physicsBody!.restitution = 0
tileNode.physicsBody!.allowsRotation = false
tileNode.name = "Tile"
row.append(tileNode)
当我移除物理体时,它运行良好。以下是一些图片,向您展示我的意思:

这张图片有一个物理实体,是在运行应用程序后立即拍摄的

此图像是在运行应用程序5分钟后拍摄的


为什么会这样?我认为这与物理体有关,因为我的应用程序看起来与第一张图片一模一样,即使在没有物理体的情况下运行应用程序一小时后也是如此。我应该改变什么物理体属性来阻止这种情况发生?任何帮助都将不胜感激。

不久前,我遇到了一个类似的问题,在平铺的节点之间出现了间隙(尽管我没有使用物理)。基于,我发现如果要在节点之间实现完美对齐,最好确保节点的位置以及节点的宽度和高度都是整数


我建议对
tileNode
位置的
x
y
值进行四舍五入,看看是否会产生任何影响。

我猜没有差距。你的gameviewcontroller中可能有“showPhysics”是真的,这条线对我来说是一个缺口


比较带和不带pb的位置进行验证

对于任何需要帮助的人,我找到了一个不同的答案。正如JohnV所说,在设置位置时,我可能需要对值进行四舍五入,但在运行代码时,我发现在运行SKActions时,我也需要这样做。

我遇到了类似的问题,在以恒定速度滚动大约5分钟后,精灵之间开始出现间隙(具有无限滚动的游戏)。我并没有使用物理学,我甚至把所有的位置、宽度、高度四舍五入到整数值。我滚动相机,一个接一个地添加新的精灵,一切正常,除了大约5分钟的无限滚动间隙开始出现,就像你的情况一样。我花了一些时间寻找解决方案,结果发现问题是,当我的对象的位置变大时,即在我的情况下,场景中的X位置约为150000,然后这些间隙开始出现,而且我注意到,这个问题只发生在必须缩放场景的设备上。我使用的是iPhone6分辨率默认场景大小的aspect fill,这些间隙只出现在iPhone5上,但在iPhone6上我没有注意到。我可以通过从所有对象的X位置(包括摄影机位置)中不时减去一些常量值来解决这个问题,这样场景中的所有对象相对于摄影机的位置都不会改变,看起来也一样,但实际上绝对位置会改变,以保持较低。我猜较大的位置值(如150000和场景缩放)会导致SpriteKit中出现浮点舍入问题,这就是为什么间隙会变得可见


因此,根据我的经验,如果您有类似的间隙,我建议对所有位置、宽度、高度使用整数值,并另外将所有对象的位置值保持较低。

如果有人仍在搜索,我的经验如下:

  • 如果瓷砖具有物理实体,则容易产生间隙。我的一个解决方案是将一个空白的SKNode作为tile的子节点,并将PhysicsBody分配给它
  • 如果可能的话,请确保位掩码的设置方式使瓷砖不会相互碰撞
  • 如前一个答案中所述,确保所有测量值都是整数,并且四舍五入的方式不会在它们之间留下一个单位的间隙

另一个相关的问题是SpriteKit的身体漂移。关于这一点有一些线索(例如),它似乎是阿布格。在我的例子中,问题是物理体的组合造成了随机的小间隙,漂移使其中一些更大。上述步骤消除了小间隙。不幸的是,在我的例子中,解决漂移问题的唯一方法是只为距离玩家一定距离内的节点生成物理实体,并在它们被甩在后面后将其销毁。

但是为什么游戏开始时运行良好,为什么只在5分钟后才会发生?不管怎样,我试着把它们四舍五入,但没有什么区别,因为它们一直都是整数。当间隔几分钟后开始出现时,我也遇到了类似的问题。这是因为在无限滚动游戏中,位置值在一段时间后变得更大。有关详细信息,请参见我的答案。
self.view!。showsPhysics=false
解决了问题。谢谢@国王法典11胡萨!:DI注意到,即使没有物理实体,SKTiled库也会产生间隙。但是,SKTiled不会生成真正的平铺集(使用SKTileMapNode),而是为每个平铺创建许多单独的节点。这可能就是为什么在运动过程中有时会出现微小间隙的原因。