【问题标题】:shooting moving location in swift快速拍摄移动位置
【发布时间】:2016-03-03 19:09:09
【问题描述】:

我正在为我的大学制作一款游戏,但我坚持一件事。

当我尝试与我的英雄一起射击时,子弹只向上或侧面我需要我的子弹在我的英雄旋转的地方请帮助我这是我的代码

func spownBullet() {
    let bullet = SKSpriteNode(imageNamed: "Bullet")
    let hero = self.childNodeWithName("hero") as! SKSpriteNode
    bullet.zPosition = 1
    bullet.position = CGPointMake(hero.position.x, hero.position.y)
    bullet.size = CGSize(width: 20, height: 30)
    let bulletact = SKAction.moveToY(self.size.height + 300, duration: 1)
    bullet.runAction(SKAction.repeatActionForever(bulletact))
    self.addChild(bullet)

}

【问题讨论】:

    标签: iphone swift sprite-kit


    【解决方案1】:

    如果我理解正确,您希望子弹以与“英雄”精灵旋转相同的角度移动一定距离(例如 300)。

    这是一个计算目标点的函数:

     // destination point moving at angle
     // ---------------------------------
     func endPointMovingSpriteFrom(origin:CGPoint, atAngle angle:CGFloat,forDistance distance:CGFloat ) -> CGPoint
     {
       let deltaX = distance / sin(angle + CGFloat(M_PI)/2)
       let deltaY = distance / cos(angle + CGFloat(M_PI)/2)
       return CGPoint(x: origin.x - deltaX, y:origin.y - deltaY)
     }
    

    您可以使用它来计算目的地,然后在 moveTo 操作中使用目的地:

     let bulletDestination = endPointMovingSpriteFrom(hero.position, atAngle:hero.zRotation, forDistance:300)
     let bulletact = SKAction.moveTo(bulletDestination, duration: 1)
    

    【讨论】:

    • 函数可以是全局的。使用它的两行应该简单地替换您在示例代码中拥有的那一行(您在其中创建项目符号)。
    • ty 但我应该在哪里,但第二个代码(让 bulletDestination = endPointMovingSpriteFrom(hero.position, atAngle:hero.rotation, forDistance:300) let bulletact = SKAction.moveTo(bulletDestination, duration: 1) ) 在 touchesMoved ..?
    • 在哪里触发子弹生成取决于程序结构的其余部分以及游戏的要求/规则。您应该将其作为一个单独的问题并提供相关代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多