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