Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何将skspritenode添加到始终在屏幕上的随机位置_Swift_Random_Position_Skspritenode_Arc4random - Fatal编程技术网

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

Swift 如何将skspritenode添加到始终在屏幕上的随机位置,swift,random,position,skspritenode,arc4random,Swift,Random,Position,Skspritenode,Arc4random,我已经尝试了几种方法在场景中随机添加精灵,它们都很有效。问题是他们一半时间在屏幕上,一半时间在屏幕外 这是我最初尝试的 func placeButtons() { let button1 = SKSpriteNode(imageNamed: "button1") let PositionX1 = arc4random_uniform(UInt32(self.frame.width)) let PositionY1 = arc4rando

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

这是我最初尝试的

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

这方面有一个很好的教程-

让button1=SKSpriteNode(图像名为:“button1”)button1.size=CGSize(宽度:50,高度:50)让位置x1=arc4random_统一(UInt32(self.frame.width-button1.size.width))让位置y1=arc4random_统一(UInt32(self.frame.height-button1.size.height))button1.position.y=CGFloat(PositionY1)button1.position.x=CGFloat(PositionX1)self.addChild(button1)是否正确?因为这仍然是在屏幕外和屏幕中间生成按钮。是的,这仍然是在屏幕外和屏幕中间生成按钮。我看到了问题,我认为-你需要使用边界大小,而不是帧-我将更新答案这很奇怪,现在它只在屏幕最左侧边缘生成按钮