2017-07-08 25 views
1

私は、ゲームを開始する間に、ポンと似たゲームに取り組んでいます。スウィフト - SpriteKitを使用して動くノードの速度を上げます

func impulse(){ 
    let randomNum:UInt32 = arc4random_uniform(200) 
    let someInt:Int = Int(randomNum) 

    //Ball Impulse 
    if someInt<49{ 
    ball.physicsBody?.applyImpulse(CGVector(dx: ballSpeed+3, dy: ballSpeed-5)) 
    }else if someInt<99{ 
     ball.physicsBody?.applyImpulse(CGVector(dx: ballSpeed+5, dy: -ballSpeed+5)) 
    }else if someInt<149{ 
     ball.physicsBody?.applyImpulse(CGVector(dx: -ballSpeed-5, dy: -ballSpeed+5)) 
    }else if someInt<200{ 
     ball.physicsBody?.applyImpulse(CGVector(dx: -ballSpeed-3, dy: ballSpeed-5)) 
    } 

} 

ここで、ballSpeedはボールの設定速度です。 動きのある時間にボールの速度を徐々に上げる方法はありますか?ボールはスクリーンの周りをバウンスし続けるので、dxとdyを使ってボールに力を加えるのは難しいです。

EDIT -

私はただのゲームの開始時にボールにランダム象限/方向を割り当てるための方法の上に使用しています。

インパルス法が実装されている場合、開始。 Game start image

そして、私はボールの速度をゲームプレイ中に時間の経過とともに所定の単位で増やしたいと思います。 Gameplay

+1

スプライトがフィジックス経由で移動している場合、その 'velocity'プロパティは値を持ちます。これはベクトルなので、インパルスのベクトルとしてベロシティを使用して別のインパルスを適用するだけで、より高速にすることができます。 –

+0

あなたの間隔にばらつきがあることをご存知ですか?最初の間隔は0から48、次の値は49から98、次の値は99から148、最後の値は149から200です。最初の3つの範囲は幅が49、最後は51です。 – user1118321

+0

@ user1118321 - 実際には、試合開始時に第3象限にボールを入れるのが好きなので、ここで与えている2つの追加ポイントのボーナスのようになります。 –

答えて

2

よろしくお願いします。何時でもボールは絶えず速くなります! amountを調整して、ボールが各フレームでどのくらいのスピードを得ているかを判断します。

class GameScene: SKScene, SKPhysicsContactDelegate { 

    let ball = SKShapeNode(circleOfRadius: 20) 
    var initialDY = CGFloat(0) 
    var initialDX = CGFloat(0) 



    override func didMove(to view: SKView) { 
    self.physicsBody = SKPhysicsBody(edgeLoopFrom: frame) 
    self.physicsWorld.gravity = CGVector.zero 

    // Configure ball pb: 
    let pb = SKPhysicsBody(circleOfRadius: 20) 
    ball.physicsBody = pb 
    addChild(ball) 

    pb.applyImpulse(CGVector(dx: 10, dy: 10)) 
    } 

    override func update(_ currentTime: TimeInterval) { 
    initialDX = abs(ball.physicsBody!.velocity.dx) 
    initialDY = abs(ball.physicsBody!.velocity.dy) 
    } 

    override func didSimulatePhysics() { 
    guard let pb = ball.physicsBody else { fatalError() } 

    // decrease this to adjust the amount of speed gained each frame :) 
    let amount = CGFloat(5) 

    // When bouncing off a wall, speed decreases... this corrects that to _increase speed_ off bounces. 
    if abs(pb.velocity.dx) < abs(initialDX) { 
     if  pb.velocity.dx < 0 { pb.velocity.dx = -initialDX - amount } 
     else if pb.velocity.dx > 0 { pb.velocity.dx = initialDX + amount } 
    } 

    if abs(pb.velocity.dy) < abs(initialDY) { 
     if  pb.velocity.dy < 0 { pb.velocity.dy = -initialDY - amount } 
     else if pb.velocity.dy > 0 { pb.velocity.dy = initialDY + amount } 
    } 
    } 
} 

あなただけSKAction.repeatForever(.sequence([.wait(forDuration: TimeInterval, .run({ code })))で5秒ごとに速度を上げるが、IMO、それは常にスピードを獲得有するビットもっとすごいと実装が簡単であるにこれを変更することができます。

+0

もう一度お返事ありがとうございます。速度もtoo –

+0

これはそれです@モルク – Fluidity

+0

ありがとう、それは完全に正常に働いた –

関連する問題