【问题标题】:Shoot bullet in the Direction the Ship is Facing Swift and Sprite Kit向船面对的方向射击子弹 Swift 和 Sprite 套件
【发布时间】:2016-03-03 23:00:54
【问题描述】:

我正在制作一款太空射击游戏,我希望飞船能够朝它所面对的方向发射子弹。我已经想出了如何让子弹朝船的方向旋转,但我还没有让它朝正确的方向射击。此刻,我只开枪。我在下面有一个屏幕截图。我怎样才能解决这个问题?这是我的代码:

if shootButton.containsPoint(location) {

            let Bullet = SKSpriteNode(imageNamed: "BulletGalaga.png")
            Bullet.zPosition = -5

            Bullet.position = CGPointMake(ship.position.x, ship.position.y)
            Bullet.zRotation = ship.zRotation
            Bullet.zPosition = ship.zPosition

            let action = SKAction.moveToY(self.size.height + 30, duration: 0.8)
            //let action = SKAction.moveTo(self.ship.size.height, duration: 0.8)
            let actionDone = SKAction.removeFromParent()
            Bullet.runAction(SKAction.sequence([action, actionDone]))

            Bullet.physicsBody = SKPhysicsBody(rectangleOfSize: Bullet.size)
            Bullet.physicsBody?.affectedByGravity = false
            Bullet.physicsBody?.dynamic = false
            self.addChild(Bullet)

        }

谢谢。

Screenshot

【问题讨论】:

  • 我尝试将 let action = SKAction.moveToY(self.size.height + 30, duration: 0.8) 替换为 moveTo,但没有成功。我知道我需要它来说明子弹必须朝飞船 zPosition 的方向移动……我也知道必须更改 moveToY。有任何想法吗? @CleverError

标签: ios swift sprite-kit swift2


【解决方案1】:

您正在设置 zPosition?你的意思是zRotation。这只会计算子弹绘制的角度,你需要做一些三角函数来确定子弹会直线到达的位置:

伪代码:

let action = SKAction.moveTo(
               CGPointMake(
                            travelDistance * cos(Bullet.zRotation) + Bullet.position.x,
                            travelDistance * sin(Bullet.zRotation) + Bullet.position.y
               ), 
               duration: 0.8)

【讨论】:

  • 我收到错误“使用未解析的标识符 tavelDistance”
  • 是的,你不能逐字复制我的代码,你需要弄清楚你想让子弹行进多远
  • 整个事情都行不通。有没有办法让你重写它?很多错误...你能解决它吗?
  • 为什么你的屏幕空间是向后的
  • 您不应该编辑其他人的答案,堆栈溢出的目的是让其他有相同问题的人获得答案而无需提出新问题,我的回答支持那些人,不知道您为什么要设置一个奇异的世界,但是对于其他人来说,它会像答案所述那样起作用。另外,常数?不好
【解决方案2】:
let action = SKAction.moveTo(
                CGPointMake(
                    400 * -cos(Bullet.zRotation - 1.57079633) + Bullet.position.x,
                    400 * -sin(Bullet.zRotation - 1.57079633) + Bullet.position.y
                ),
                duration: 0.8)

【讨论】:

  • M_PI_2 如果你想要 1/2 PI
  • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多