2017-04-24 7 views
1

現在、私のアプリには、敵からx、yのどの位置でも弾丸を撃つ敵があります。これは上から下への敵の軌道で一度だけ起こるSKActionであり、この軌道はすべてランダムなXの位置にあります。Swift3 SpriteKit:角度で弾を撃つ

私がしたいことは、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) 
} 

私はbullet1のための弾丸を変更し、私はおそらく、各弾丸を回転させるzRotationを使用できるものとbullet2、3と4のために繰り返すことができることを仮定していますその特定の角度まで。

私が理解できないことは、どの方向に弾を動かすかである。具体的には、その時の敵の位置からSKAction.moveToのXとYを求める方法。

私は多くの記事を検索して読みましたが、正しい方向で私を指摘することはできません。

+0

は、私はあなたがraywenderlich.com HTTPS上でこの素晴らしいチュートリアルを読んで推薦 – Knight0fDragon

+0

@JoseCarrilloを調整します。 raywenderlich.com/57368/trigonometry-game-programming-sprite-kit-version-part-1 –

答えて

3

この投稿のおかげで、KnightOfDragonの投稿Shoot bullet in the Direction the Ship is Facing Swift and Sprite Kitのおかげで、三角法で正しい方向に私を指摘しました。

基本的には、変数名をbullet1からbullet1に変更し、bullet2,3,4を追加してzRotationを同じ関数内で変更しました。 moveBullet1 SKActionは、zRotationが指し示す方向に弾を発射します。

次の拡張子を使用します。私はこのサイトでどこを見つけたのか覚えていない。 // WWW:あなたはのRectが極地に座標変換する方法はatan2作品は、基本的に学びたい

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 } 
} 

Four bullets shot in different directions.

関連する問題