import SpriteKit
class GameScene: SKScene {
var greenBall = SKSpriteNode(imageNamed: "greenball")
var redBall = SKSpriteNode(imageNamed: "redball")
override func didMoveToView(view: SKView) {
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
backgroundColor = SKColor.purpleColor()
//
var bar0 = SKSpriteNode(imageNamed: "bar0")
var bar1 = SKSpriteNode(imageNamed: "bar1")
var bar2 = SKSpriteNode(imageNamed: "bar2")
var bar3 = SKSpriteNode(imageNamed: "bar3")
var bar4 = SKSpriteNode(imageNamed: "bar4")
var bar5 = SKSpriteNode(imageNamed: "bar5")
var bars = SKSpriteNode(imageNamed: "bar\(arc4random_uniform(6))")
var bartest = SKSpriteNode(imageNamed: "bar0")
bartest.position = CGPoint(x: frame.midX, y: frame.size.height * 0.633)
addChild(bartest)
var barra = SKShapeNode(rectOfSize: CGSize(width: frame.size.width, height: 10))
barra.name = "bar"
barra.fillColor = SKColor.whiteColor()
barra.position = CGPoint(x: frame.midX, y: frame.midY)
greenBall.position = CGPoint(x: frame.midX-100, y: frame.midY)
greenBall.yScale = 2
greenBall.xScale = 2
redBall.position = CGPoint(x: frame.midX+100, y: frame.midY)
redBall.yScale = 2
redBall.xScale = 2
self.addChild(redBall)
self.addChild(greenBall)
self.addChild(barra)
func makeBars() {
var randomTopOrBot = arc4random_uniform(2)
if randomTopOrBot == 0 {
var MaxY = frame.size.height * 0.951
var MinY = (frame.size.height * 0.633)-bars.size.height
var Range = CGFloat(MaxY - MinY)
var barsSpawnX = (frame.midX)
var barSpawnY = CGFloat(arc4random_uniform(UInt32(Range)))
bars.position = CGPoint(x: frame.midX, y: barSpawnY)
addChild(bars)
} else {
var MaxY = frame.size.height * 0.951
var MinY = (frame.size.height * 0.633)-bars.size.height
var Range = CGFloat(MaxY - MinY)
var barsSpawnX = (frame.midX)
var randomBetweenRange = CGFloat(arc4random_uniform(UInt32((Range))))
bars.position = CGPoint(x: frame.midX, y: (MinY+randomBetweenRange))
println(frame.size.height * 0.633)
addChild(bars)
}
}
let wait = SKAction.waitForDuration(3, withRange: 2)
let spawn = SKAction.runBlock { makeBars <--- this is where it's saying the problem is()
}
let sequence = SKAction.sequence([wait, spawn])
self.runAction(SKAction.repeatActionForever(sequence))
<小时/>
编辑:所以基本上我有 2 个生成位置可供选择,我用随机数在这两个位置之间随机决定,现在我想将计时器应用于函数 makeBars,但它告诉我我无法引用本地函数
<小时/>这给了我一个错误,提示“无法引用来自另一个本地函数的捕获的本地函数”。
我该如何解决这个问题?
最佳答案
您在 didMoveToView
方法中声明了 makerbars()
方法。所以这毕竟是一个函数嵌套问题,给出完整的代码我能够看到真正的问题。
将您的代码更改为下面我修改和更正的版本:
导入SpriteKit
类游戏场景:SKScene {
var greenBall = SKSpriteNode(imageNamed: "greenball")
var redBall = SKSpriteNode(imageNamed: "redball")
override func didMoveToView(view: SKView) {
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
backgroundColor = SKColor.purpleColor()
//
var bar0 = SKSpriteNode(imageNamed: "bar0")
var bar1 = SKSpriteNode(imageNamed: "bar1")
var bar2 = SKSpriteNode(imageNamed: "bar2")
var bar3 = SKSpriteNode(imageNamed: "bar3")
var bar4 = SKSpriteNode(imageNamed: "bar4")
var bar5 = SKSpriteNode(imageNamed: "bar5")
var bartest = SKSpriteNode(imageNamed: "bar0")
bartest.position = CGPoint(x: frame.midX, y: frame.size.height * 0.633)
addChild(bartest)
var barra = SKShapeNode(rectOfSize: CGSize(width: frame.size.width, height: 10))
barra.name = "bar"
barra.fillColor = SKColor.whiteColor()
barra.position = CGPoint(x: frame.midX, y: frame.midY)
greenBall.position = CGPoint(x: frame.midX-100, y: frame.midY)
greenBall.yScale = 2
greenBall.xScale = 2
redBall.position = CGPoint(x: frame.midX+100, y: frame.midY)
redBall.yScale = 2
redBall.xScale = 2
self.addChild(redBall)
self.addChild(greenBall)
self.addChild(barra)
let wait = SKAction.waitForDuration(3, withRange: 2)
let spawn = SKAction.runBlock { self.makeBars() }
let sequence = SKAction.sequence([wait, spawn])
self.runAction(SKAction.repeatActionForever(sequence))
}
func makeBars() {
var bars = SKSpriteNode(imageNamed: "bar\(arc4random_uniform(6))")
var randomTopOrBot = arc4random_uniform(2)
if randomTopOrBot == 0 {
var MaxY = frame.size.height * 0.951
var MinY = (frame.size.height * 0.633)-bars.size.height
var Range = CGFloat(MaxY - MinY)
var barsSpawnX = (frame.midX)
var barSpawnY = CGFloat(arc4random_uniform(UInt32(Range)))
bars.position = CGPoint(x: frame.midX, y: barSpawnY)
addChild(bars)
} else {
var MaxY = frame.size.height * 0.951
var MinY = (frame.size.height * 0.633)-bars.size.height
var Range = CGFloat(MaxY - MinY)
var barsSpawnX = (frame.midX)
var randomBetweenRange = CGFloat(arc4random_uniform(UInt32((Range))))
bars.position = CGPoint(x: frame.midX, y: (MinY+randomBetweenRange))
println(frame.size.height * 0.633)
addChild(bars)
}
}
}
关于swift - 使用 waitforduration 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082583/