2017-07-22 9 views
0

このコードを編集して、spawnRandomPosition関数でも画像が画面の下から45ピクセル下にスポーンされるようにするにはどうすればよいですか?だから、画面の上部に45ピクセルがで生み出さすることはできません。特定の画像Spawn

class SecondViewController: UIViewController { 

private var addOne = 0 

func spawnRandomPosition() -> CGPoint 
{     
    let width = UIScreen.main.fixedCoordinateSpace.bounds.width 
    let height = UIScreen.main.fixedCoordinateSpace.bounds.height 

    let centerArea = CGRect(x: UIScreen.main.fixedCoordinateSpace.bounds.midX - 75.0/2, 
          y: UIScreen.main.fixedCoordinateSpace.bounds.midY - 75.0/2, 
          width: 75.0, 
          height: 75.0) 

    while true 
    { 
     let randomPosition = CGPoint(x: Int(arc4random_uniform(UInt32(width))), y: Int(arc4random_uniform(UInt32(height)))) 


     if !centerArea.contains(randomPosition) 
     { 
      return randomPosition 
     } 
    } 
} 

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 
let translation = recognizer.translation(in: self.view) 
if let view = recognizer.view { 
    view.center = CGPoint(x:view.center.x + translation.x, 
          y:view.center.y + translation.y) 
    } 
recognizer.setTranslation(CGPoint.zero, in: self.view) 

if (WhiteDot.frame.contains(smallDot.frame) && smallDot.image != nil) { 
    addOne += 1 
    score.text = "\(addOne)" 
    smallDot?.center = spawnRandomPosition() 

} 
} 
    } 
+0

あなたの質問が何度も繰り返されていますが、私はあなたの試みがはっきりしていることを理解することができます –

+0

私は同意します。私は数時間前にこの同じ質問を見ました。なぜあなたはあなたの質問を削除し、最初のものを編集する**代わりに**新しいものを作成していますか? – dfd

答えて

1

たぶん、あなたは異なるアプローチを必要とし、エレガントではありませんが、もしの

func spawnRandomPosition() -> CGPoint { 

let screenWidth = UIScreen.main.fixedCoordinateSpace.bounds.width 
let screenHeight = UIScreen.main.fixedCoordinateSpace.bounds.height 
boolean valid = true; 
repeat 
{ 
    let randomPosition = CGPoint(x:CGFloat(arc4random()),y:arc4random()) 
    if(randomPosition.x >screenWidth || randomPosition.y < 45 || (randomPosition.x > ((screenWidth/2)- 37.5) && randomPosition.x< ((screenWidth/2)+ 37.5) || (randomPosition.y > ((screenHeight/2)- 37.5) && randomPosition.y< ((screenHeight/2)+ 37.5)) 
     valid = false 
}while(valid = false;) 
} 

しかし、もちろん、あなたが考慮して取るべきを使用することができますそれはちょうど、機能spawnRandomPositionを少し修正する代わりに)(あなたはランドを使用することができますので、非常に高い数値をお返しし、非効率的なソリューションで終わる)(

+0

私はそれを試みましたが、それは私にエラーを与えました。 "rand()はSwiftでは利用できません:代わりにarc4randomを使用してください。" – ZDP

+0

自分のコードを更新しましたが、設定したパラメータは使用されていません。 – ZDP

+0

私はあなたが高さと幅で分ける理由を理解できません、私は他の人の応答を見ていたことを忘れてください –

1

をarc4randomできます

func spawnRandomPosition() -> CGPoint 
{ 
    let minY: CGFloat = 45.0 

    let width = UIScreen.main.fixedCoordinateSpace.bounds.width 
    let height = UIScreen.main.fixedCoordinateSpace.bounds.height - minY 

    let centerArea = CGRect(x: UIScreen.main.fixedCoordinateSpace.bounds.midX - 75.0/2, 
          y: UIScreen.main.fixedCoordinateSpace.bounds.midY - 75.0/2, 
          width: 75.0, 
          height: 75.0) 

    while true 
    { 
     let randomPosition = CGPoint(x:CGFloat(arc4random()).truncatingRemainder(dividingBy: height), 
            y:minY + CGFloat(arc4random()).truncatingRemainder(dividingBy: width)) 

     // Check for 'forbidden' area 
     if !centerArea.contains(randomPosition) 
     { 
      return randomPosition 
     } 
    } 
} 
+0

自分のコードを更新しましたが、コード内のパラメータ内に生成されません。 – ZDP

+0

何らかの理由がありますか? – ZDP

+0

コードをデバッグしようとしましたか、いくつかのログを追加しようとしましたか? –

関連する問題