我开始使用SKS文件在swift中创建游戏,在这个游戏中我试图让敌人在手机屏幕的宽度内随机生成,而不是在整个sks文件场景中
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: Selector("spawnEnemy"), userInfo: nil, repeats: true)
}
func spawnEnemy(){
//supposed to pick random point within the screen width
let xPos = Int.random(self.frame.width)
enemy = SKSpriteNode(imageNamed: "enemy")
enemy.position = CGPointMake(CGFloat(xpos), self.frame.size.height/2)
enemy.physicsBody = SKPhysicsBody(circleOfRadius: 7)
enemy.physicsBody?.affectedByGravity = true
enemy.physicsBody?.categoryBitMask = 0
enemy.physicsBody?.contactTestBitMask = 1
addChild(self.enemy)
}
答案 0 :(得分:1)
无论如何,我为你写了一个例子:)
因此,以下是您的示例应该如何工作:
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: Selector("spawnEnemy"), userInfo: nil, repeats: true)
}
func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat{
return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum)
}
func spawnEnemy(){
//supposed to pick random point within the screen width
let xPos = randomBetweenNumbers(0, secondNum: frame.width )
let enemy = SKSpriteNode(imageNamed: "enemy") //create a new enemy each time
enemy.position = CGPointMake(CGFloat(xPos), self.frame.size.height/2)
enemy.physicsBody = SKPhysicsBody(circleOfRadius: 7)
enemy.physicsBody?.affectedByGravity = true
enemy.physicsBody?.categoryBitMask = 0
enemy.physicsBody?.contactTestBitMask = 1
addChild(enemy)
}
方法randomBetweenNumbers来自here。
而且,这是使用SKAction产生敌人的另一种方法:
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
let wait = SKAction .waitForDuration(1, withRange: 0.5)
let spawn = SKAction.runBlock({
self.spawnEnemy()
})
let spawning = SKAction.sequence([wait,spawn])
self.runAction(SKAction.repeatActionForever(spawning), withKey:"spawning")
}
方法spawnEnemy在两种情况下保持不变。要停止产卵,您可以删除某个键的操作(在这种情况下为“产生”)。你可以这样做:
if((self.actionForKey("spawning")) != nil){
self.removeActionForKey("spawning")
}