2016-10-29 4 views
2

スプライト「彗星」を無作為にランダムな位置に表示させようとしています。これまでは、私のランダムポジションコードが動作するかどうかテストしたいと思っていましたが、スプライトが見えないように見えません。スプライトをランダムな位置に表示する

func spawnAtRandomPosition() { 
     let height = self.view!.frame.height 
     let width = self.view!.frame.width 

     let randomPosition = CGPointMake(CGFloat(arc4random()) % height, CGFloat(arc4random()) % width) 

     let sprite = SKSpriteNode(imageNamed: "comet") 
     sprite.position = randomPosition 
     self.addChild(sprite) 
    } 

私が言ったように、私は何もが表示されません:これは私のコードです。どんな助け?あなたはすでにそれが自分自身の問題を抱えているので、それが認められるだろうランダムな時間に表示する方法を既に知っていれば、これは今私の焦点です。ありがとう!

+1

問題があるかどうかはわかりませんが、xの位置は幅に、yの位置は高さに依存する必要があります。あなたはそれを間違った方向に持っています。 –

+0

私はそれを修正しましたが、問題を解決しませんでした – Guac

+1

これはSwift 3でもコンパイルしてはいけません。1)(存在しない) '%2 'の代わりに' CGFloat'の 'truncatingRemainder '演算子' lhs'と 'rhs'は' CGFloat'型であり、2) 'CGPoint(x:y:)'初期化子を使います。例えば。 'let randomPosition = CGPoint(x:CGFloat(arc4random())。truncatingRemainder(divisionBy:width)、y:CGFloat(arc4random())。truncatingRemainder(dividerBy:height))'を実行します。 – dfri

答えて

1

ランダムな位置を設定するコードが正しくありません。また、あなたのコードは、あなたの完全な機能は次のようになります。それは不可能スウィフト3でコンパイルするために作るべき問題があります。

func spawnAtRandomPosition() { 
     let height = UInt32(self.size.height) 
     let width = UInt32(self.size.width) 

     let randomPosition = CGPoint(x: Int(arc4random_uniform(width)), y: Int(arc4random_uniform(height))) 

     let sprite = SKSpriteNode(imageNamed: "comet") 
     sprite.position = randomPosition 
     self.addChild(sprite) 
    } 

注意をrandomPositionに変わり、高さと幅:

let randomPosition = CGPoint(x: Int(arc4random_uniform(width)), y: Int(arc4random_uniform(height))) 

これは0とあなたの幅の間のランダムな値を決定し、同じことを高さに対して行います。

高さと幅については、ビューとシーンの違いを説明する質問について@ Whirlwindのコメントを参照してください。

ランダムポジショニングをテストする前にノードを正しく設定しているか(サイズの設定、固定場所の試しなど)、問題が本当にどこにあるかを確認したい場合があります。

+0

'randomPosition'行は、「 'CGFloat'型の値を 'UInt32'型に変換できません」というエラーをプルアップします。これまでの助けてくれてありがとう。 – Guac

+0

いいえ、エラーは変更されましたが、基本的に同じことを意味します。それは、 "タイプ '(x:UInt32、y:UInt32)'の引数リストを持つ 'CGPoint'型の初期化子を呼び出せません" – Guac

+0

いいえ、どうですか?私はそれがどう変わるか分かりません。 – Guac

0

私はこのコードのビットを思い付いた、それが私の作品:

let randomNum = CGPoint(x:Int (arc4random() % 1000), y: 1) 

    let actionMove = SKAction.moveTo(randomNum, duration: 1) 

私はあなたが同様にランダム化されるように「Y」が必要ただし場合、xはランダム化したい、あなたができるだけ指定をxからyにコピーします。

+0

これはちょうど0と999の間の乱数を決定するだけです。あなたのシーンの幅は999にならないでしょう。今、 'randomNum'が999で、シーンの幅が768(ポートレートのデフォルト幅)ノード(シーン外の可能性があります) – Nik

関連する問題