在我的游戏中,我希望每 10 秒生成一个敌人。我尝试通过在 GameViewController 中编写来完成此任务
var secondEnemyTimer = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: "secondEnemyFunction", userInfo: nil, repeats: false)
在 viewWillLayoutSubviews 方法中。然后在第二个EnemyFunction中我写:
let skView = self.view as! SKView
let gameScene = GameScene(size: skView.bounds.size)
gameScene.enemy2Function()
然后在 GameScene 类的敌人2Function 中我编写:
println("Called!")
enemy2.name = enemyCategoryName
enemy2.size.width = 57
enemy2.size.height = 57
let randomX = randomInRange(Int(CGRectGetMinX(self.frame)), hi: Int(CGRectGetMaxX(self.frame)))
let randomY = randomInRange(Int(CGRectGetMinY(self.frame)), hi: Int(CGRectGetMaxY(self.frame)))
let randomPoint = CGPoint(x: randomX, y: randomY)
enemy2.position = randomPoint
self.addChild(enemy2)
enemy2.physicsBody = SKPhysicsBody(circleOfRadius: enemy1.size.width / 2)
enemy2.physicsBody?.friction = 0
enemy2.physicsBody?.restitution = 1
enemy2.physicsBody?.linearDamping = 0
enemy2.physicsBody?.allowsRotation = false
enemy2.physicsBody?.applyImpulse(CGVectorMake(50, -50))
enemy2.physicsBody?.categoryBitMask = enemyCategory
在日志“调用!”中出现但敌人尚未生成。只是为了让你知道我确实通过以下方式在类(class)中创造了顶尖的敌人:
let enemy2 = SKSpriteNode(imageNamed: "enemy")
有谁知道我如何生成第二个敌人?预先感谢您!
-维尼
最佳答案
您应该让事情变得简单,并在 GameScene 中完成所有操作。另一件事是放弃 NSTimer 并使用 SKAction 来生成敌人。 NSTimer 不尊重场景的暂停状态,因此您最终可能会遇到一些麻烦。这是使用 SKAction 生成敌人的方法:
GameScene.swift:
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
generateEnemies()
}
func stopGeneratingCoins(){
if(self.actionForKey("spawning") != nil){removeActionForKey("spawning")}
}
func generateEnemies(){
if(self.actionForKey("spawning") != nil){return}
let timer = SKAction.waitForDuration(10)
//let timer = SKAction.waitForDuration(10, withRange: 3)//you can use withRange to randomize duration
let spawnNode = SKAction.runBlock {
var enemy = SKSpriteNode(color: SKColor.greenColor(), size:CGSize(width: 40, height:40))
enemy.name = "enemy" // name it, so you can access all enemies at once.
//spawn enemies inside view's bounds
let spawnLocation = CGPoint(x:Int(arc4random() % UInt32(self.frame.size.width - enemy.size.width/2) ),
y:Int(arc4random() % UInt32(self.frame.size.height - enemy.size.width/2)))
enemy.position = spawnLocation
self.addChild(enemy)
println(spawnLocation)
}
let sequence = SKAction.sequence([timer, spawnNode])
self.runAction(SKAction.repeatActionForever(sequence) , withKey: "spawning") // run action with key so you can remove it later
}
}
说到定位,我假设您的场景已经具有正确的尺寸。如果场景未正确初始化并且与 View 具有不同的大小(或更准确地说,不同的纵横比),则敌人在生成时可能会离开屏幕位置。了解更多 here关于如何正确初始化场景大小。
关于swift - 生成敌人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909725/