[Swift] 붉은 적을 무작위 위치에서 내려온다.(SpriteKit)

7398 단어 XcodeSwiftSpriteKit
다만, 빨간색의 사각형(x축 방향에 관한)은 무작위의 위치에서 고른 속도의 직선을 통해 운동한다.
arc4random_uniform() 근처 지정은 좀 복잡하지만 이 근처가 좀 더 간단할 수 있을까...
GameScene.swift

import SpriteKit

class GameScene: SKScene {

    var last:CFTimeInterval!
    var width: Int!

    override func didMoveToView(view: SKView) {
        self.physicsWorld.gravity = CGVectorMake(0, 0)

        // 画面の幅をIntでとっている。
        self.width = Int(self.view.bounds.size.width)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {}

    // ここで赤い敵を発生させるメソッドを用意する。(ま、ただの赤い四角ですけど。)
    func createEnemy(x: UInt) {

        let enemy = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(60, 40))

        enemy.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(60, 40))
        enemy.physicsBody.affectedByGravity = false
        enemy.physicsBody.linearDamping = false
        enemy.physicsBody.velocity = CGVectorMake(0, -100)

        enemy.position = CGPoint(
            x: CGFloat(x),
            y: CGRectGetMaxY(self.frame)
        )
        self.addChild(enemy)
    }

    override func update(currentTime: CFTimeInterval) {

        if !last {
            last = currentTime
        }

        // ここで一秒ごとに赤い敵をランダムな位置から発生させる。
        if last + 1 <= currentTime {

            // 敵が生成されるx軸の位置をきめる。
            // センターから、「0<=乱数<=幅」なる乱数を足して、幅の半分を引く。
            var xEnemyPos: UInt! = UInt(CGRectGetMidX(self.frame))
                + UInt(arc4random_uniform(UInt32(self.width)))
                - UInt(self.width / 2)

            self.createEnemy(xEnemyPos)

            last = currentTime
        }
    }
}

좋은 웹페이지 즐겨찾기