我正在尝试在Swift上制作一个移动平台,为了使玩家与平台一起移动,我需要将
问题在于我原以为两个位置之间的距离是确切的60(20 * 3秒),但我收到了平台
self.moveByX()
更改为physicsBody?.velocity
(并给平台和玩家都加入一些摩擦力)。
因此,我创建了以下函数:
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