Swift 使用随机数(arc4random_uniform)显示随机形状

Swift 使用随机数(arc4random_uniform)显示随机形状,swift,cocoa-touch,random,Swift,Cocoa Touch,Random,此代码的目的是进行随机编号以显示随机形状,但模拟器在屏幕左下角的同一位置显示这些形状,由于某种原因,a位置的随机性不起作用 代码: 阅读异常消息的第一行可能会有所帮助。@nhgri如果我确实阅读了它,但我不太明白在这里该怎么做,我是一个新手swift@nhgrif没关系,我通过修改self.addChild(shape)——self.addChild(SKSpriteNode(imageNamed:“shape”))修复了它,但我遇到了另一个错误,我编辑了这篇文章,请你看一下,把它改回去,然后把

此代码的目的是进行随机编号以显示随机形状,但模拟器在屏幕左下角的同一位置显示这些形状,由于某种原因,
a
位置的随机性不起作用

代码:


阅读异常消息的第一行可能会有所帮助。@nhgri如果我确实阅读了它,但我不太明白在这里该怎么做,我是一个新手swift@nhgrif没关系,我通过修改self.addChild(shape)——self.addChild(SKSpriteNode(imageNamed:“shape”))修复了它,但我遇到了另一个错误,我编辑了这篇文章,请你看一下,把它改回去,然后把例外情况贴出来好吗。您正在设置
circle
位置(
StartGame
类属性),但后来您没有添加
circle
,而是添加了新的
SKSpriteNode
SKSpriteNode(imageNamed:“circle”)
),这与
circle
属性(设置位置的位置)无关@robertvojta当我更改skspritenode(ImageName:“circle”)时,它工作正常,但它只显示每个图像中的一个,然后崩溃
import UIKit
import SpriteKit
import Darwin

class StartGame: SKScene {

var scoreLabel = SKLabelNode(fontNamed: "cholkDuster")
var square = SKSpriteNode(imageNamed: "square")
var circle = SKSpriteNode(imageNamed: "circle")
var rectangle = SKSpriteNode(imageNamed: "rectangle")
var triangle = SKSpriteNode(imageNamed: "triangle")
let bg = SKSpriteNode(imageNamed: "background.png")
var score = 0

override func didMoveToView(view: SKView) {

    //random number for the shapes

    var timecreatShapes = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("creatShapes"), userInfo: nil, repeats: true)

    //background image

    bg.position = CGPoint(x: CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
    bg.size.width = self.frame.size.width
    bg.size.height = self.frame.size.height
    self.addChild(bg)

    self.scoreLabel.text = "0"
    self.scoreLabel.fontSize = 42
    self.scoreLabel.position = CGPoint(x: CGRectGetMidX(self.frame) , y: CGRectGetMidY(self.frame))
    self.addChild(scoreLabel)
    scoreLabel.zPosition = 2

    self.physicsWorld.gravity = CGVectorMake(0, -0.5)

    //declaring a square image

    square.size = CGSize(width: 150, height: 100)
    square.color = SKColor.redColor()
    square.physicsBody = SKPhysicsBody(circleOfRadius: square.size.height / 2)
    square.physicsBody?.dynamic = true
    square.physicsBody?.allowsRotation = false

    //declaring a circle image

    circle.size = CGSize(width: 150, height: 100)
    circle.physicsBody = SKPhysicsBody(circleOfRadius: square.size.height / 2)
    circle.physicsBody?.dynamic = true
    circle.physicsBody?.allowsRotation = false

    //declaring a triangle

    triangle.size = CGSize(width: 150, height: 100)
    triangle.physicsBody = SKPhysicsBody(circleOfRadius: square.size.height / 2)
    triangle.physicsBody?.dynamic = true
    triangle.physicsBody?.allowsRotation = false

    //declaring rectangle

    rectangle.size = CGSize(width: 150, height: 100)
    rectangle.physicsBody = SKPhysicsBody(circleOfRadius: square.size.height / 2)
    rectangle.physicsBody?.dynamic = true
    rectangle.physicsBody?.allowsRotation = false

}

func creatShapes () {

    var x = Int ( arc4random_uniform(4) + 1)
    var a = CGFloat ( arc4random_uniform(1000) + 1)

    switch(x){
    case 1:
        circle.position = CGPoint (x:  a , y: self.frame.size.height)
        self.addChild(SKSpriteNode(imageNamed:"circle"))
    case 2:
        square.position = CGPoint(x:  a , y: self.frame.size.height)
        self.addChild(SKSpriteNode(imageNamed:"square"))
    case 3:
        rectangle.position = CGPoint(x:  a , y: self.frame.size.height)
        self.addChild(SKSpriteNode(imageNamed:"rectangle"))
    case 4:
        triangle.position = CGPoint(x: a , y: self.frame.size.height)
        self.addChild(SKSpriteNode(imageNamed:"triangle"))

    default:
        break

    }
    println(x)
    println(a)

}

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
       if (self.nodeAtPoint(location) == self.square || self.nodeAtPoint(location) == self.triangle || self.nodeAtPoint(location) == self.circle || self.nodeAtPoint(location) == self.rectangle){

        self.score++

        }
        self.scoreLabel.text = String(self.score)
    }

}