2017-09-13 20 views
3

私は画面の上から下に2行移動する単純なゲームを持っています。それらの2つのラインの間に固定されたスペースがあり、ボールがそのスペース内を通過しなければならず、そうでなければゲームは終了する。SpriteKit移動アクションの速度を向上

私はゲームの基本に問題はありません、私は2つの行、毎回異なる位置を持つスペースを追加することができますが、私はまた、行の移動速度を増やしたいと思います。私はタイマーを使用してSKAction.moveのTimeIntervalを増やそうとしましたが、後で追加した行が高速になるので、行間の水平スペースが小さくなり、発生したくありません。

これは、2行を追加して画面の下に移動する機能です。

func addLines() { 

    let lineNodeFirst = SKSpriteNode(color: .red, size: CGSize(width: random(min: 100, max: 400), height: 10.0)) 
    lineNodeFirst.position = CGPoint(x: -size.width/2, y: 0 + size.height/2 + 100) 
    lineNodeFirst.anchorPoint = CGPoint.zero 

    let actionMove = SKAction.move(to: CGPoint(x: lineNodeFirst.position.x, y: 0 - size.height/2), duration: TimeInterval(2.3)) 
    let actionMoveDone = SKAction.removeFromParent() 

    lineNodeFirst.run(SKAction.sequence([actionMove, actionMoveDone])) 

    let centerPoint = CGPoint(x: lineNodeFirst.size.width/2 - (lineNodeFirst.size.width * lineNodeFirst.anchorPoint.x), y: lineNodeFirst.size.height/2 - (lineNodeFirst.size.height * lineNodeFirst.anchorPoint.y)) 
    lineNodeFirst.physicsBody = SKPhysicsBody(rectangleOf: lineNodeFirst.size, center: centerPoint) 

    lineNodeFirst.physicsBody?.isDynamic = true 
    lineNodeFirst.physicsBody?.categoryBitMask = 2 
    lineNodeFirst.physicsBody?.contactTestBitMask = 1 
    lineNodeFirst.physicsBody?.collisionBitMask = 0 

    self.addChild(lineNodeFirst) 

    let spaceBetweenNodes: CGFloat = 150 
    let lineNodeSecondWidth: CGFloat = size.width - lineNodeFirst.size.width - spaceBetweenNodes 

    let lineNodeSecond = SKSpriteNode(color: .red, size: CGSize(width: lineNodeSecondWidth, height: 10.0)) 
    lineNodeSecond.anchorPoint = CGPoint.zero 
    let lineNodeSecondX = lineNodeFirst.position.x + lineNodeFirst.size.width + spaceBetweenNodes 
    lineNodeSecond.position = CGPoint(x: lineNodeSecondX, y: lineNodeFirst.position.y) 

    let actionMoveSecond = SKAction.move(to: CGPoint(x: lineNodeSecond.position.x, y: 0 - size.height/2), duration: TimeInterval(2.3)) 

    lineNodeSecond.run(SKAction.sequence([actionMoveSecond, actionMoveDone])) 

    let centerPointSecond = CGPoint(x: lineNodeSecond.size.width/2 - (lineNodeSecond.size.width * lineNodeSecond.anchorPoint.x), y: lineNodeSecond.size.height/2 - (lineNodeSecond.size.height * lineNodeSecond.anchorPoint.y)) 
    lineNodeSecond.physicsBody = SKPhysicsBody(rectangleOf: lineNodeSecond.size, center: centerPointSecond) 

    lineNodeSecond.physicsBody?.isDynamic = true 
    lineNodeSecond.physicsBody?.categoryBitMask = 2 
    lineNodeSecond.physicsBody?.contactTestBitMask = 1 
    lineNodeSecond.physicsBody?.collisionBitMask = 0 

    self.addChild(lineNodeSecond) 

} 

私は基本がある私のアプリのデモを共有します。行の移動速度を上げるための提案はありますか?

Demo Video

+0

あなたは、行の移動の速度を上げる代わりに、最後の行だけをスピードアップのため、画面上に表示され、すべてのそれらをスピードアップするすべての行をループします。 – Whirlwind

+0

'SKCamera'を使うと、行の代わりにボールを動かすことができます。 – 0x141E

答えて

2

私はすべてのライン上の速度を増加させずに回線を高速化する方法を考えることはできません。すべてのラインのスピードを上げることなく、ライン間の隙間が狭くなるという問題があります。そうしないと、スクリーン上のすべてのラインを横断して同時にアクションを書き直す必要があります。

これはおそらくかなり簡単ですが、画面を上下にスクロールする2つの大きなパネルを作成し、下にあるページをスクロールしてリセットすると、スクロールバックの背景が作成されます。その後、それらのパネルにバーを適用します。今度はバーが画面の下に移動する効果があります。ゲームをプレイするスピードを上げたいときは、2つのパネルのスピードを上げるだけです。

私のデモイメージでは、複数の色を追加してパネル間のブレークを表示しています。それらの背景色が削除された場合は、パネルが動いていて棒ではないことに気づくこともありません)

追加のボーナスとして、パネルをクラスとして作成し、バーをクラスとして割り当ててパネルへのバー。パネルを上にリセットする時間が来たら、バーの2つの内側のオープニングポイントを新しいギャップに調整するだけです。この方法では、これらのバーを動的にオンザフライで作成することはありません。

enter image description here

関連する問題