【发布时间】:2017-06-24 04:52:15
【问题描述】:
我有一个带有物理身体的精灵。 为了移动这个精灵,在 update() 函数中,我不断地将精灵的速度设置为向右移动 150 单位,向左移动 -150。 (见附件代码。)
我有第二个物理体,我想跟随第一个精灵。第二个物理体的坐标在第一个的底部,向右 20 个点。
我希望第二个物理体始终跟随第一个物理体,并带有偏移量。
我的代码大部分有效,但我注意到第一个和第二个主体之间的距离略有不同,我希望没有变化。向右移动时,它们之间的距离被压缩了一点。向左移动时,它们之间的距离会增加一点。在此处观看视频:https://www.youtube.com/watch?v=K9FhIdMwp7k
这是我正在使用的代码:
override func update(_ currentTime: TimeInterval) {
switch playerDirection {
case "stopped":
playerSpeed = 0.0
case "right":
playerSpeed = 150.0
case "left":
playerSpeed = -150.0
default:
print("default")
}
// ball is the first sprite and footBall is the second sprite:
ball.physicsBody?.velocity = CGVector(dx: playerSpeed, dy: ball.physicsBody!.velocity.dy)
footBall.position = CGPoint(x: (ball.position.x + 20), y: ball.position.y - (ball.size.height / 2) + 4)
myCam.position = CGPoint(x: round(ball.position.x), y: self.size.height / 2)
...
我也一直在尝试使用 override func didSimulatePhysics() 也没有成功。
我做了一个不同的测试,只是不使用速度来移动玩家,而是直接增加 ball.position.x (ball = player) 和 footBall.position.x,当我这样做时,一切都完美对齐.但如果我走这条路,我将不得不改变我的游戏物理在游戏其他地方的工作方式,我宁愿忽略这一点。
感谢观看。
【问题讨论】: