2016-03-22 10 views
2

私は以下のようにコーディングされています:「n」個のspriteNodeを画面サイズ内に表示し、画面内を移動するにはどうすればよいですか?

func spriteCollection(count : Int) -> [SKSpriteNode]{ 

    var spriteArray = [SKSpriteNode]() 

    for _ in 0..<count { 

     let sprite = SKSpriteNode(imageNamed: "node.png") 

     //giving random position to sprites, but problem is some sprites are going invisible. How do I make it appear inside the view? 

     let x = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.height))) 

     let y = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.width))) 

     sprite.position = CGPoint(x: x, y: y) 

     spriteArray.append(sprite) 

    } 

    return spriteArray 

} 

override func didMoveToView(view: SKView) { 

    let spriteCollection = spriteCollection(10) 

    for sprite in spriteCollection{ 

     //facing problem here, not sure how to move it inside the view 

     let x = CGFloat(arc4random_uniform(UInt32(size.height))) 

     let y = CGFloat(arc4random_uniform(UInt32(size.width))) 

     let action = SKAction.moveTo(CGPoint(x: x , y: y), duration: 5) 

     sprite.runAction(action) 

     addChild(sprite) 
    } 
} 

私が今直面してる問題は、私はspriteCollectionに数10を通過した場合、私は唯一の5つのまたは6スプライトを参照し、すべてが隠されて休むことができる、です。私はちょうどすべてのスプライトを画面サイズの内側に表示させたいのですが、私が移動アクションを実行するときにはその位置も画面内にあるはずです。私は風景モードで作業しています。誰でも私にこれを解決するのを助けてください。

+0

だからシーンのサイズをチェックし、スポーン座標をチェックして、いくつかのノードがオフされているかどうかを確認画面の境界ビューの境界にしていない基づいて、ランダムに配置してきた後に画面... – Whirlwind

+0

ノードの位置だけでなく、ビューの幅と高さも印刷しました。任意のビューの幅 任意(375.0)<---すべてのノードのビューの高さxおよびyの位置 (492.0,62.0) (479.0,67.0) (189.0,248.0) (91.0)すべての座標は内部が、まだいくつかあるように、298.0) (54.0、214.0) (490.0、155.0) (590.0、224.0) (127.0、122.0) (328.0、233.0) (204.0、195.0)が見えますノードは表示されません。私が間違っていること –

+0

シーンのサイズは? (シーンにノードを追加しています)。シーンのサイズはビューとは異なる場合があります。 .sksファイルからシーンをロードする場合、デフォルトでシーンサイズは1024x768です。 – Whirlwind

答えて

0

問題は、画面の境界が縦になっているときに画面の境界がデバイスに向いていて、画面の境界が画面サイズに基づいている風景モードで表示されます。

あなたの問題を解決する1つの方法は、あなたが「スクリーンスペース」で作業しているときに、xとyの計算を逆にするだろう

// Note how width and height appear to be "backward" here. That's because the screen 
// coordinates are defined by the portrait orientation of the device, 
// but the view will eventually be in a landscape orientation 

let x = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.width))) 
let y = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.height))) 

しかし、私は良いアイデアがにあなたのスプライトを移動するために待機することになると思います初期位置までのビューが作成され、

+0

私のコードで私は幅と高さを交換している場合は、あなたの提案をありがとう。私は高さを考慮しているxの位置とその逆。しかし、まだ私は問題に直面しています。また、私は画面の代わりにビュー境界を検討しようとしましたが、まだ運がありません。これを再現するための提案はありますか? –

+0

ノードの位置だけでなく、ビューの幅と高さも印刷しました。オプション(667.0)、ビューの幅 オプション(375.0)ビューの高さ (492.0、62.0) (479.0、67.0) (189.0、248.0) (91.0、298.0) (54.0、214.0) (490.0、155.0) (590.0,224.0) (127.0,122.0) (328.0,233.0) (204.0、195.0) –

関連する問題