目前,我的应用程序有一个敌人,它会发射一颗子弹,子弹从敌人的任何 x 和 y 位置射向屏幕底部 - 子弹的大小。这是一个 SKAction,在敌人从上到下的轨迹中只发生一次,并且这些轨迹都是随机的 X 位置。
我想做的是从 4 个不同的角度发射 4 颗子弹。 45、135、225 和 270 度。
目前我的fireBullet功能如下:
func fireBullet() {
let bullet = EnemyBullet(imageName: bulletImage, bulletSound: bulletSound)
bullet.name = "Bullet"
bullet.setScale(1)
bullet.position = CGPoint(x: enemy.position.x, y: enemy.position.y - bullet.size.height)
bullet.physicsBody = SKPhysicsBody.init(rectangleOf: bullet.size)
bullet.physicsBody!.affectedByGravity = false
bullet.physicsBody!.categoryBitMask = PhysicsCategories.enemy
bullet.physicsBody!.collisionBitMask = PhysicsCategories.none
bullet.physicsBody!.contactTestBitMask = PhysicsCategories.player
gameScene.addChild(bullet)
let moveBullet = SKAction.moveTo(y: -gameScene.size.height * 0.1, duration: bulletTimeInScreen)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
bullet.run(bulletSequence)
}
我假设我可以更改项目符号 1 的项目符号并重复更改项目符号 2、3 和 4。这样我就可以使用 zRotation 将每个项目符号旋转到该特定角度。
我不知道子弹要朝哪个方向移动。具体来说,如何从敌人当时的位置算出SKAction.moveTo的X和Y。
我搜索并阅读了很多文章,但没有一篇可以为我指明正确的方向。
最佳答案
多亏了这篇文章,我找到了一种方法 Shoot bullet in the Direction the Ship is Facing Swift and Sprite Kit作者:KnightOfDragon 顺便说一下,它用三角学为我指明了正确的方向。
基本上,我将变量名称从项目符号更改为项目符号1,并添加了项目符号2、3 和4,从而在同一函数中更改了zRotation。 moveBullet1 SKAction 朝 zRotation 指向的方向发射子弹。
度数使用如下所示的扩展名。我不记得在这个网站的哪里找到了那个。
func fireBullet() {
let bullet1 = EnemyBullet(imageName: bulletImage, bulletSound: bulletSound)
bullet1.name = "Bullet"
bullet1.setScale(scale)
bullet1.position = CGPoint(x: enemy.position.x, y: enemy.position.y)
bullet1.zRotation = CGFloat(45.degreesToRadians)
bullet1.physicsBody = SKPhysicsBody.init(rectangleOf: bullet1.size)
bullet1.physicsBody!.affectedByGravity = false
bullet1.physicsBody!.categoryBitMask = PhysicsCategories.enemy
bullet1.physicsBody!.collisionBitMask = PhysicsCategories.none
bullet1.physicsBody!.contactTestBitMask = PhysicsCategories.player
gameScene.addChild(bullet1)
let moveBullet1 = SKAction.move(to: CGPoint(
x: distance * cos(bullet1.zRotation) + bullet1.position.x,
y: distance * sin(bullet1.zRotation) + bullet1.position.y),
duration: bulletTimeInScreen)
let deleteBullet1 = SKAction.removeFromParent()
let bullet1Sequence = SKAction.sequence([moveBullet1, deleteBullet1])
bullet1.run(bullet1Sequence)
}
extension Int {
var degreesToRadians: Double { return Double(self) * .pi / 180 }
var radiansToDegrees: Double { return Double(self) * 180 / .pi }
}
关于Swift3 SpriteKit : Shooting bullets at angles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43596422/