EnterFrameBeaconとは?
EnterFrameBeaconは指定されてFPSで処理を実行する、アニメーションフレームを管理クラスです。
Swiftでは、CAnimationとかあるようですが、非常に使いづらいので簡単に動きが付けれるエンジンを用意します。
EnterFrameBeaconは今は亡きActionScriptの技術でした...アーメン。
今回は簡易版です。
仕組み
仕組みは簡単です。管理クラスを用意し、リスナーを保持するプロパティを持たせます。
class EnterFrameBeacon: NSObject {
private var _listeners:[EnterFrameDelegate] = []
}
リスナーにはEnterFrameDelegate(プロトコル)を関連させます。この型をもつオブジェクトを
_listenersで管理します。_listenersは静的プロパティのほうが扱いやすいです。
import Foundation
import UIKit
protocol EnterFrameDelegate {
func update()
}
毎フレーム処理を実行するためにはNSTimerクラスを利用します。
プロパティとして_timerを用意します。
private var _timer: NSTimer!
EnterFrameBeaconは3つのメソッドを持ちます。
- initialize 初期化
- addEventListener リスナー登録
- update 毎フレーム実行される処理
順番に見ていきます。
まずは初期化、引数でFPSを渡します。デフォルトで60が設定されます。
func initialize(fps: NSTimeInterval = 60.0){
self._timer = NSTimer.scheduledTimerWithTimeInterval(1.0 / fps, target: self, selector: "update", userInfo: nil, repeats: true)
}
次にリスナー登録、EnterFrameDelegateプロトコルを持つインスタンスを登録します。
func addEventListener(listener: EnterFrameDelegate) {
self._listeners.append(listener)
}
最後に毎フレーム呼び出される処理です。
func update(){
let max = self._listeners.count
for var i = 0; i < max; ++i {
let obj: EnterFrameDelegate = self._listeners[i] as EnterFrameDelegate
obj.update()
}
}
これで完了です。
実際に使う場合は、以下のようになります。
self._beacon = EnterFrameBeacon()
self._beacon.initialize(60.0)
self._beacon.addEventListener(self)
func update(){
// 具体的な処理
}
以上です。