【问题标题】:Specific Image Spawn特定图像生成
【发布时间】:2017-12-28 12:47:19
【问题描述】:

如何编辑此代码以使 spawnRandomPosition 函数也不允许图像从屏幕底部向下生成 45 像素?所以屏幕顶部的 45 个像素无法生成。

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()

}
}
    }

【问题讨论】:

  • 我一遍又一遍地看到你的问题,但我可以清楚地弄清楚你在尝试什么
  • 我同意。几个小时前我看到了同样的问题。为什么要删除您的问题并创建新问题而不是编辑第一个问题?

标签: ios swift image cocoa-touch pixel


【解决方案1】:

也许你需要一种不同的方法,虽然不优雅,但你可以使用 if's

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;)
}

当然你应该考虑到 arc4random() 可能会返回一个非常高的数字并最终得到一个低效的解决方案,所以你可以使用 rand() 代替

【讨论】:

  • 我试过了,但它给了我错误,“rand() 在 Swift 中不可用:请改用 arc4random。”
  • 我更新了我的代码,但是我设置的参数没有被使用。
  • 我不明白你为什么要除以高度和宽度,忘了我是看到其他人的回应
  • 我上面的代码除了 minY 变量之外还可以工作,知道为什么吗?
  • 编辑阻止了我,但是当 y 位置从上开始时,您正在带走 miny,这是您要避免的区域,很好,您带走了 45,但结果是您必须添加再次跳过前 45 个位置
【解决方案2】:

稍微修改一下函数spawnRandomPosition:

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
        }
    }
}

【讨论】:

  • 我更新了我的代码,但它没有在代码中的参数中产生。
  • 有什么原因吗?
  • 您是否尝试过调试代码或添加一些日志记录?
  • centerArea 代码可以正常工作,但不会在其中生成,但 minY 无法正常工作,并且会在它表示不生成的 45 像素以上生成。代码运行良好,并且我已经尝试清理它并多次重新启动 Xcode。
  • 这应该是我所说的,但没有正确解释,忘了它,他添加了最小的宽度应该是高度
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多