【发布时间】:2015-12-12 05:44:34
【问题描述】:
我有一个 Swift / SpriteKit 游戏,其中一大堆精灵具有物理体来检测与玩家的碰撞 - 但否则它们不应该移动。
我的问题是,只要我添加了一个物理实体,精灵就会出现少量移动。更具体地说,它的位置变化很小(如 0.0003)。最初这么小的变化无关紧要,但它会一直这样变化,直到精灵真正在屏幕上移动并弄乱游戏。
为了缩小范围,我创建了一个只有一个精灵的简单项目,我注意到只要我将一个物理体附加到我的精灵,它的位置就会发生微小的变化。
我已经尝试过的事情:
- 检查重力是否关闭
- 将物理体的 resting 属性设置为 true
- 将物理体的受重力影响属性设置为 false
我在 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
}
}
【问题讨论】:
-
尝试打印物理体的速度,看看它是否在变化
-
刚刚检查,速度始终为零。
标签: macos sprite-kit position physics