2017-10-27 13 views
0

私はSpriteKitゲームを作っています。私は6つの大砲を持っています。私は、各大砲の回転に同期する各大砲から大砲を撃ちたい。私は各砲弾の間に1秒の時間が必要です。回転砲からボールを​​撃つ

基本的には、回転している大砲は回転と同じ方向に砲弾を撃っています。

extension CGFloat { 
func degreesToRadians() -> CGFloat { 
    return self * CGFloat.pi/180 
} 
} 

私は砲弾の動きの一つを調整する方法を見つけ出すことができるはずですので、私は、つもりはちょうど1つの大砲のためのコードを入れてね:大砲のために

iは、拡張子を使用しています他人。ここでは1である。ここでは

func createCannons() { 

    let cannonLeftBottom = SKSpriteNode(imageNamed: "Cannon") 

    cannonLeftBottom.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    cannonLeftBottom.position = CGPoint(x: -325, y: -420) 
    cannonLeftBottom.zPosition = 4 
    cannonLeftBottom.setScale(0.4) 
    cannonLeftBottom.zRotation = CGFloat(65).degreesToRadians() 

    let rotateLB = SKAction.rotate(byAngle: 
    CGFloat(-65).degreesToRadians(), duration: 2) 

    let rotateBackLB = SKAction.rotate(byAngle: 
    CGFloat(65).degreesToRadians(), duration: 2) 

    let repeatRotationLB = 
    SKAction.repeatForever(SKAction.sequence([rotateLB,rotateBackLB])) 

    cannonLeftBottom.run(repeatRotationLB) 

    self.addChild(cannonLeftBottom) 

} 

は砲弾のための私の関数である。

func createBalls() { 

    let cannonBallLB = SKSpriteNode(imageNamed: "Ball") 

    cannonBallLB.name = "CannonBall" 
    cannonBallLB.position = CGPoint(x: -325, y: -420) 
    cannonBallLB.physicsBody = SKPhysicsBody(circleOfRadius: 
    cannonBallLB.size.height/2) 
    cannonBallLB.physicsBody?.affectedByGravity = false 
    cannonBallLB.zPosition = 3 
    cannonBallLB.setScale(0.1) 
    self.addChild(cannonBallLB) 

} 

THX!

+0

あなたのコードは何ですか? – ThrowingSpoon

+0

ThrowingSpoon - 申し訳ありませんが私は明確でない場合。私は大砲の回転と同じ方向に大砲を動かすコードを書いたがっています。大砲の回転がうまくいっています。しかし、それは私が書きたい大砲の動きです。 – Flinigan

答えて

1

極座標から長方形座標に変換する必要があります。

sinとcosを使用してこれを行います。

E.G.

let speed = 100 //This would mean move 100 points per second 
let force = CGVector(dx:cos(cannon.zRotation) * speed,dy:sin(cannon.zRotation) * speed) 
cannonBall.applyForce(force) 

注:彼らはメートル単位にそれを固定した場合今、彼らはこれを変更しない限り、ポイントの単位であることに使用される力が、その後は中150ポイント= 1メートル以来、150であなたの速度を分割する必要がありますSpritekit

+0

ありがとうございます。しかし、どのようにCGPointに力を加えるのですか? cannonball.physicsBody.applyForce(force)を追加することで、forceがCGVectorではないのでエラーが出ます。 – Flinigan

+0

なぜCGPointに力をかけますか?あなたの大砲のボールは、物理学のボディを持つスプライトでなければなりません。私はCGVectorを反映するようにコードを変更しました – Knight0fDragon

+0

はい、ちょうど言ったようにCGPointをCGVectorに変更しようとしましたが、ボールは動きません。 – Flinigan

関連する問題