2016-11-22 6 views
1

私はSpriteKitベースでのiPhoneのための簡単なゲームに取り組んでいますし、画面の上部から来るボールを起動しようとしています。しかし、ボールはサイドから産み続けているし、トップからどのように見えるようにするのか分からない....これをどうやって変えるのか? (コードを参照)。これは無作為に産卵するための良い方法ですか?それとも、私はそれらを産んで重力の規則に陥らせるべきですか?あなたは-Yで移動する必要がSpriteKitでコードを作成するにはどうすればいいですか?

//ENEMIES 

func random() -> CGFloat { 
    return CGFloat(Float(arc4random())/0xFFFFFFFF) 
} 

func random(min: CGFloat, max: CGFloat) -> CGFloat { 
    return random() * (max - min) + min 
} 

// 1 
func spawnEnemy() { 
    // 2 
    let enemy = SKSpriteNode(imageNamed: "ball") 
    // 3 
    enemy.name = "enemy" 
    // 4 
    enemy.position = CGPoint(x: frame.size.width + enemy.size.width/2, 
          y: frame.size.height * random(min: 0, max: 1)) 
    // 5 
    addChild(enemy) 

    enemy.run(
     SKAction.moveBy(x: -size.width - enemy.size.width, y: 0.0, 
         duration: TimeInterval(random(min: 1, max: 2)))) 

} 
+0

は...私に聞こえます。これは正しいです? – Knight0fDragon

答えて

3

がその位置(0,0)覚えて....あろう底が増加するx値は左から右へスクリーンを横切って行くと上がってyの値を増加させると、画面の左側れます画面を下から上に表示します。

あなたスポーンポイントが常にランダムy値(すなわち、ランダムな高さ)と、画面の右側に外れている

(x: frame.size.width + enemy.size.width/2, y: frame.size.height * random(min: 0, max: 1) 

あります。 (SKActionはそのx値を一定に保ちながら0に、現在のy値から敵を移動する必要がある、あなたの動きを

(x: frame.size.width * random(min: 0, max: 1), y: frame.size.height + enemy.size.height/2) 

その後、ドリーマーが言ったように:あなたのx値はランダムにする必要があるとあなたのy値があることが必要

産卵と重力についてのあなたの質問については、あなたのオブジェクトを一定の速度(これはあなたの修正されたSKActionが行うことになる)下に移動したい、または次のように見えるようにしますか?彼らは加速ゆっくりと、しかし絶えず移動を開始し、その後、表示されると思います。その場合には、重力下で落下しているが。

編集:KnightOfDragonsが言ったように - の実際の位置(0、0)座標を(するCGPointである自体が、これは実際の座標に関連しない)anchorPointとして知られている性質によって支配されます。これは、常に左下を意味する(0、0)が使用されていましたが、(0.5、0.5)になることがあります。つまり、画面の中心、すなわち(0,0)に配置されたスプライトが画面の中央に表示されます。 xまたはyを大きくするとスプライトが右または上に移動し、xまたはyを小さくするとスプライトが左または下に移動します。 frame.size: - Y画面の

  • トップ:

    これは、あなたのシーンは(0.5、0.5)のanchorPointを持っている場合は、画面の端がの座標を持っていることを意味します。スクリーンの高さ/ 2

  • ボトム - Y:-frame.size.height/2
  • 画面の右端 - X:画面​​のframe.size.width/2
  • 左端 - X :-frame.size.height/2

anchorPontがあるかどうかは(0、0)または(0.5、0.5)は、あなたのシーンが.sksファイルまたはコードを来た場合に依存していてもよいです。あなたは肖像画専用モードで風景ゲームを作っているよう

+1

新しいテンプレートは今度は0,0を中央に置きます – Knight0fDragon

+0

@ Knight0fDragon - これは.sksファイルを使ってインスタンス化されたシーンやコードでも同様です。 (テストするチャンスはありませんでした)。 –

+0

SKSファイルだけですが、クラスのデフォルトには0,0のアンカーポイントがあります。決してテストしなかった – Knight0fDragon

1

代わりの

enemy.run(
     SKAction.moveBy(x: -size.width - enemy.size.width, y: 0.0, 
         duration: TimeInterval(random(min: 1, max: 2)))) 

。 Xは左右、Yは上下に移動します。それは

enemy.run(
     SKAction.moveBy(x: 0.0 , y: -size.height - enemy.size.height, 
         duration: TimeInterval(random(min: 1, max: 2)))) 
+0

これは動きにも当てはまりますが、スプライトを画面の右端から上に配置するので、最初の配置にも対処する必要があります。 –

関連する問題