私は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の* 3S)であることが予想ということですが、私は、プラットフォームのログを受けていますこのような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
しばらくの間、スプライトキットで作業していません。しかし、私はあなたが速度を何度も繰り返していると推測しています。あなたの "SKAction.runBlock"では、 "self.physicsBody?.velocity"を適用する前に速度をゼロにリセットしてみてください。繰り返しますが、これは単なる推測であり、私はspritekitでもう動作しません。しかし、摩擦/速度損失は両方の物体で同じではないかもしれない。ベロシティをリセットすると、それが修正される可能幸運の仲間。 –
うん、それも試してみましたが、問題は変わりません –
純粋にテストのために、両方のオブジェクトを同じサイズ/質量にしようとしましたか?そうすると、問題は消えますか? –