我試圖在Swift上製作一個移動平臺,爲了讓玩家與平臺一起移動,我需要將self.moveByX()
更簡單得多,即physicsBody?.velocity
(併爲平臺和播放器添加一些摩擦)。Swift:爲距離設置速度
所以,我做了這樣的功能:
self.runAction(
SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock({
print(self.position.x)
self.physicsBody?.velocity = CGVectorMake(20, 0.0)
}),
SKAction.waitForDuration(3),
SKAction.runBlock({
print(self.position.x)
self.physicsBody?.velocity = CGVectorMake(-20, 0.0)
}),
SKAction.waitForDuration(3)
])
)
)
的問題是,我所期望的位置之間的差異正好60(20分* 3秒),但我收到了平臺的日誌x
位置是這樣的:
596.042907714844
544.228393554688
596.048950195312
544.234008789062
596.054565429688
544.116333007812
595.936584472656
544.121887207031
595.942199707031
544.127685546875
595.824584960938
544.009704589844
所以,位置之間的區別是什麼之間51〜52
如何使平臺移動的規範通過改變速度確定距離和準確距離?
編輯:我不知道這是否是相關的,但我已經設置了平臺的物理身體是這樣的:
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
self.physicsBody?.categoryBitMask = PhysicsCategory.Ground
self.physicsBody?.contactTestBitMask = PhysicsCategory.Player
self.physicsBody?.collisionBitMask = PhysicsCategory.Player
self.physicsBody?.allowsRotation = false
self.physicsBody?.affectedByGravity = false
self.physicsBody?.dynamic = true
self.physicsBody?.friction = 1.0
self.physicsBody?.restitution = 0.0
self.physicsBody?.mass = 99999999999
我還沒有使用sprite套件一段時間。但我猜你正在一遍又一遍地重複速度。在您的「SKAction.runBlock」中,嘗試在應用「self.physicsBody?.velocity」之前將您的速度重置爲零。再次,這只是一個猜測,我不再與spritekit一起工作。但是這兩種物體的摩擦/速度損失可能不盡相同。重置速度可能會修復它。祝你好運。 –
是的,我也試過了,問題沒有改變 –
純粹是爲了測試,你是否試圖讓兩個物體具有相同的尺寸/質量?當你這樣做時,問題是否消失? –