仅在屏幕宽度内随机产生敌人

时间:2015-10-19 20:51:10

标签: sprite-kit swift2

我开始使用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)
}

1 个答案:

答案 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") 
    }