【问题标题】:Making a sprite appear at a random y point使精灵出现在随机 y 点
【发布时间】:2016-01-21 17:06:03
【问题描述】:

我正在尝试创建一个精灵并给它一个随机的 y 位置,目前一些精灵在视野之外产生或被部分切断。我哪部分错了(屏幕是横向的)并且viewFrame被传递到函数中并且是游戏场景的框架

 let enemyShip = SKSpriteNode(imageNamed: "enemyShip")
        enemyShip.position = CGPointMake(viewFrame.maxX + enemyShip.size.height, CGFloat(arc4random_uniform(UInt32(viewFrame.maxY - enemyShip.size.height)) + UInt32(enemyShip.size.height)))

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    试试这个

    func random(min min: CGFloat, max: CGFloat) -> CGFloat {
        assert(min < max)
        return CGFloat(Float(arc4random()) / 0xFFFFFFFF) * (max - min) + min
    }
    
    let x = random(
        min: enemyShip.size.width/2,
        max: self.size.width - enemyShip.size.width/2
    )
    
    let y = random(
        min: enemyShip.size.height/2,
        max: self.size.height - enemyShip.size.height/2
    )
    
    enemyShip.position = CGPointMake(x, y)
    

    【讨论】:

    • 断言失败,最大值为负
    • 我从字面上复制并粘贴了它但是我修复了它,我认为一个原因是因为你试图使 x 坐标随机,这是不想要的,它应该在屏幕外产生,然后我有更新在屏幕上移动它。那部分坏了,所以我把 x 放回 viewFrame.maxX + enemyShip.size.height 并调整了 y 并且它起作用了
    • let x = viewFrame.maxX + enemyShip.size.width let y = random(enemyShip.size.height*2.3, max: viewFrame.maxY - enemyShip.size.height*2.3)这是我现在使用的,它工作正常,我不确定除了使用高度的2.3倍之外还有更好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多