如何将skspritenode添加到始终在屏幕上的随机位置



我已经尝试了几种方法在场景中随机添加精灵,它们都成功了。问题是一半的时间他们在屏幕上,一半的时间在屏幕外。

这是我最初尝试的。

    func placeButtons() {
        let button1 = SKSpriteNode(imageNamed: "button1")
        let PositionX1 = arc4random_uniform(UInt32(self.frame.width))
        let PositionY1 = arc4random_uniform(UInt32(self.frame.height))  
        button1.position.y = CGFloat(PositionY1)
        button1.position.x = CGFloat(PositionX1)
        self.addChild(button1)
}

这是我试过的最后一个。

    func placeButtons() {
        let button1 = SKSpriteNode(imageNamed: "button1")
        let sizeX = Int(CGRectGetMaxX(self.frame))
        let sizeY = Int(CGRectGetMaxY(self.frame))
        var randomX = CGFloat(Int(arc4random()) % sizeX)
        var randomY = CGFloat(Int(arc4random()) % sizeY)
        button1.position = CGPointMake(randomX, randomY)
        self.addChild(button1)
}

我需要保证这个按钮总是出现在屏幕上。

提前感谢您的帮助!

如果在self.frame中随机放置按钮,则有时只会看到按钮的开头。

最大宽度&你应该使用的高度是

self.view.bounds.size.width - button1.frame.width    
self.view.bounds.size.height - button1.frame.height

因此,如果你已经知道你想要的按钮尺寸,请将你的随机发生器更新为这个

    let PositionX1 = arc4random_uniform(UInt32(self.view.bounds.size.width - myButtonWidth))
    let PositionY1 = arc4random_uniform(UInt32(self.view.bounds.size.height - myButtonHeight))  

这里有一个很好的教程-http://www.ymc.ch/en/ios-7-sprite-kit-setting-up-correct-scene-dimensions

最新更新