当 isDynamic 为 false 时,SpriteKit 精灵会轻微移动
SpriteKit Sprites slightly moving when isDynamic is false
我正在使用 Swift 3 和 Sprite Kit 开发游戏。我有一个点网格,它不应该移动,但对于检测碰撞很重要。我的问题是,这些点在轻微移动。你看不到它在移动,但如果我打印位置,我会看到它们在移动。这就是我创建点的方式:
for dot in dots {
//dot subclasses SKSpriteNode
dot.name = "dot\(index)"
dot.size = CGSize(width: DotWidth, height: DotHeight)
dot.position = pointFor(column: dot.column, row: dot.row)
dotsLayer.addChild(dot)
//dot.sprite = sprite
dot.physicsBody = SKPhysicsBody(circleOfRadius: 2)
dot.physicsBody?.affectedByGravity = false
dot.physicsBody?.allowsRotation = false
dot.physicsBody?.isDynamic = false
dot.physicsBody?.categoryBitMask = PhysicsCategory.Dot
dot.physicsBody?.contactTestBitMask = PhysicsCategory.Stick
dot.physicsBody?.collisionBitMask = PhysicsCategory.None
dot.physicsBody?.usesPreciseCollisionDetection = true
index += 1
}
我尝试了一些方法,例如 affectedByGravity(即使没有重力)和 allowsRotation。如果我打印一个点的位置(SKSpriteNode 的子类),我得到 Optional((47.9458236694336, 47.9458236694336)),但是如果我稍后打印同一个点的位置,我得到 Optional((47.86669921875, 79.892448425293))。我等待的时间越长,差异就越大。如果我打开 showPhysics,我会注意到这些点向下并向左移动。有什么办法可以完全不移动点吗?
似乎我的问题只存在于 运行 模拟器中的应用程序中。即使使用最新的 Xcode 模拟器 (Xcode 8.1)。我使用哪个模拟器并不重要(iPhone 5、iPhone 6 等)。 运行 相同的应用程序在真实设备上,没有显示移动问题。 'dots' 与创建时的位置完全相同。所以这似乎是一个模拟器错误。
我正在使用 Swift 3 和 Sprite Kit 开发游戏。我有一个点网格,它不应该移动,但对于检测碰撞很重要。我的问题是,这些点在轻微移动。你看不到它在移动,但如果我打印位置,我会看到它们在移动。这就是我创建点的方式:
for dot in dots {
//dot subclasses SKSpriteNode
dot.name = "dot\(index)"
dot.size = CGSize(width: DotWidth, height: DotHeight)
dot.position = pointFor(column: dot.column, row: dot.row)
dotsLayer.addChild(dot)
//dot.sprite = sprite
dot.physicsBody = SKPhysicsBody(circleOfRadius: 2)
dot.physicsBody?.affectedByGravity = false
dot.physicsBody?.allowsRotation = false
dot.physicsBody?.isDynamic = false
dot.physicsBody?.categoryBitMask = PhysicsCategory.Dot
dot.physicsBody?.contactTestBitMask = PhysicsCategory.Stick
dot.physicsBody?.collisionBitMask = PhysicsCategory.None
dot.physicsBody?.usesPreciseCollisionDetection = true
index += 1
}
我尝试了一些方法,例如 affectedByGravity(即使没有重力)和 allowsRotation。如果我打印一个点的位置(SKSpriteNode 的子类),我得到 Optional((47.9458236694336, 47.9458236694336)),但是如果我稍后打印同一个点的位置,我得到 Optional((47.86669921875, 79.892448425293))。我等待的时间越长,差异就越大。如果我打开 showPhysics,我会注意到这些点向下并向左移动。有什么办法可以完全不移动点吗?
似乎我的问题只存在于 运行 模拟器中的应用程序中。即使使用最新的 Xcode 模拟器 (Xcode 8.1)。我使用哪个模拟器并不重要(iPhone 5、iPhone 6 等)。 运行 相同的应用程序在真实设备上,没有显示移动问题。 'dots' 与创建时的位置完全相同。所以这似乎是一个模拟器错误。