gpt4 book ai didi

swift - 在 Spritekit/Swift 中将第二个 Sprite 与第一个 Sprite 的物理体对齐

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:16 25 4
gpt4 key购买 nike

我有一个带有物理 body 的 Sprite 。为了移动这个 Sprite ,在 update() 函数中,我不断地将 Sprite 的速度设置为 150 单位向右移动,-150 向左移动。 (见附件代码。)

我有第二个物理体,我希望它跟随第一个 Sprite 。第二个物理体的坐标在第一个物理体的底部,向右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 当我这样做时,一切都完美对齐.但如果我选择这条路线,我将不得不改变我的游戏物理在游戏其他地方的工作方式,我宁愿忽略这一点。

感谢您的关注。

最佳答案

如果将第二个节点添加为第一个节点的子节点,是否满足您的要求?也就是说,而不是让两者处于同一级别:

scene.addChild(ball)
scene.addChild(footBall)

替换为:

scene.addChild(ball)
ball.addChild(footBall)

然后将 footBall 位置设置为您需要的偏移量:

footBall.position = CGPoint(x: 20, y: - (ball.size.height / 2) + 4)

然后任何时候球移动,footBall 也会移动,因为它是一个子节点,因此您可以删除 footBall 的手动位置更新代码。

关于swift - 在 Spritekit/Swift 中将第二个 Sprite 与第一个 Sprite 的物理体对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com