我有一个Swift / SpriteKit游戏,其中一大堆精灵有物理机构来检测与玩家的碰撞 - 但是否则他们不应该移动。
我的问题是,只要我添加一个物理主体,精灵似乎会逐渐移动。更具体地说,它的位置变化一小部分(如0.0003)。最初这么小的变化并不重要,但是它会一直在变化,直到精灵实际上在屏幕上移动并弄乱了游戏。
为了缩小范围,我创建了一个只有一个精灵的简单项目,我注意到,只要我将一个物理体附加到我的精灵上,它的位置就会微小变化。
我已经尝试过的事情:
我在OS X上使用Xcode进行编码
但没有运气。
这是一个代码片段,在测试项目中显示了这一点:
import SpriteKit
class TestScene: SKScene, SKPhysicsContactDelegate {
let sprite1 = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(50, 50))
override func didMoveToView(view: SKView) {
physicsWorld.gravity = CGVectorMake(0.0, 0.0)
physicsWorld.contactDelegate = self
sprite1.position = CGPointMake(200, 200)
sprite1.physicsBody = SKPhysicsBody(rectangleOfSize: sprite1.size)
sprite1.physicsBody?.affectedByGravity = false
sprite1.physicsBody?.resting = true
self.addChild(sprite1)
sprite1.position = CGPointMake(200, 200)
}
override func update(currentTime: NSTimeInterval) {
print(sprite1.position)
// position is not 200,200 as expected
// it becomes 199.999938964844, 199.999938964844 after a few updates
// In my real project the position will keep drifting like this until it moves on screen
}
}
答案 0 :(得分:0)
我认为它的动态属性默认设置为yes。将其设置为false并且精灵不应再移动
sprite1.physicsBody?.dynamic = false
我刚刚在一个项目中对此进行了测试,它仍然说199.9 ....但它似乎没有增加或减少