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

时间:2016-04-13 03:37:52

标签: swift random position skspritenode arc4random

我已经尝试了几件事情来随机添加精灵在场景中它们都有效。问题在于它们在屏幕上的时间的一半,以及它们在屏幕外的一半时间。

这是我最初的尝试。

    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)

}

我需要保证按钮始终显示在屏幕上。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您将按钮随机放置在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