gpt4 book ai didi

swift - 将 SKSpriteNode 的移动与另一个 SKSpriteNode 的旋转同步

转载 作者:行者123 更新时间:2023-11-30 12:14:32 25 4
gpt4 key购买 nike

/image/JQ9r6.png

在上面您可以看到我的游戏的图像。我有敌人生成并沿 y 轴向下移动。玩家应该在敌人到达墙壁之前将其击落。现在,玩家正在旋转到触摸的位置。我想要的是让子弹的旋转方向与旋转方向相同。现在的情况是,子弹径直前进。这是子弹的代码。

func spawnBullets(towards point: CGPoint) {
let bullet = SKSpriteNode(imageNamed: "Bullet")
bullet.zPosition = 1
bullet.position = CGPoint(x: player.position.x + 19, y:
player.position.y)
let action = SKAction.move(to: point, duration:
TimeInterval(1))
bullet.run(SKAction.repeatForever(action))

self.addChild(bullet)
}

这是我用于旋转播放器的代码:

static let Pi = CGFloat(Double.pi)
static let DegreesToRadians = Pi / 180

override func touchesMoved(_ touches: Set<UITouch>, with event:
UIEvent?) {
let curTouch = touches.first!
let curPoint = curTouch.location(in: self)

let deltaX = self.player.position.x - curPoint.x
let deltaY = self.player.position.y - curPoint.y
let angle = atan2(deltaY, deltaX)

self.player.zRotation = angle + 90 * GameplayScene.DegreesToRadians

}

如何使子弹的方向和玩家的旋转“同步”?

最佳答案

您旋转播放器。这一切都很好。但是,如果您想使用 SKAction,它不会考虑旋转。它只是表示绝对位置。

您想要的是将项目符号移向触摸位置(用一个点,而不仅仅是用 Y):

spawnBullet(towards point: CGPoint) {
// ...
let action = SKAction.moveTo(location: point, duration: 3.0)
}

然后您将触摸位置传递给该函数。您需要获得适当的操作持续时间,以便子弹以所需的速度行进。

关于swift - 将 SKSpriteNode 的移动与另一个 SKSpriteNode 的旋转同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593892/

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