読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

swift3.0でフレーム処理:EnterFrameBeaconを使って見る

スポンサードリンク

これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~
f:id:InvokeTwoA:20151023183618p:plain「swiftでフレーム処理をしたい!」
f:id:InvokeTwoA:20151215172640p:plain「spriteKitを使わない場合、どうやったら良いんでしょうねー」

やりたいこと

  • 60fpsでフレーム処理をしたい
  • 具体的には画像が1fps毎に動くようにしたい

EnterFrameBeaconを使う

f:id:InvokeTwoA:20151023183618p:plain「ネット上のソースコードは古くてどれも swift3.0に対応してなかったので、一応ソースを載せてみるよ」
f:id:InvokeTwoA:20151215172640p:plain「誰かにはきっと需要がある」

EnterFrameBeacon.swift

// フレーム処理の管理クラス
class EnterFrameBeacon: NSObject {
    private var _listeners:[EnterFrameDelegate] = []
    private var _timer: Timer!
    
    func initialize(fps: TimeInterval = 60.0){
        self._timer = Timer.scheduledTimer(timeInterval: 1.0 / fps, target: self, selector: #selector(EnterFrameBeacon.update), userInfo: nil, repeats: true)
    }
 
    func addEventListener(listener: EnterFrameDelegate) {
        self._listeners.append(listener)
    }
    
    func update(){
        let max = self._listeners.count
        for i in 0 ..< max {
            let obj: EnterFrameDelegate =  self._listeners[i] as EnterFrameDelegate
            obj.update()
        }
    }
}

EnterFrameDelegate.swift

import Foundation
import UIKit

protocol EnterFrameDelegate {
    func update()
}

使い方

class HogeViewController: UIViewController, EnterFrameDelegate {
    var _beacon : EnterFrameBeacon = EnterFrameBeacon()

      override func viewDidLoad() {
        super.viewDidLoad()        
        self._beacon.initialize(fps: 60.0)
        self._beacon.addEventListener(listener: self)
    }

    func update() {
        // 何かフレーム毎の処理
    }