trick7さんがTeraFire(ブログ記事)とTeraClock(ブログ記事)という非常に面白いライブラリを公開されてたので、ちょっと使ってみた。ガスコンロにしか見えないdemoはこちら。
一応イメージとしては、サンクチュアリの黄道十二宮にある、全て消える前に何とかして矢を抜かないとアテナが死んでしまうと言うあの火時計をイメージしたものを作ってみたのだが、時計の文字盤部分が絵心の無い俺には難しすぎて作れなかった。現状では、1時間に1個火が消える、何やら不気味な火の玉集団になってしまっている。
一応、午前/午後0時が全部火がついてる状態で、それから1時間ごとに1つ1つ火が消えていく。時刻はギリシャに合わせてある(GMT+2)。なお、12時になると火が全部消えるかと思いきや、逆に全部点く。
こんなものを作るために、TeraFireとTeraClockのソースを躊躇無く書き換え、コミットしてしまった。ゴメンよ。
TeraFireのココを変えました!
まずTeraFireだが、コンストラクタに引数を2つ追加してみた。
- public function TeraFire(xPos:Number=0, yPos:Number=0, fireWidth:Number=30, fireHeight:Number=90){
↓
- public function TeraFire(xPos:Number=0, yPos:Number=0, fireWidth:Number=30, fireHeight:Number=90, fireColorIn:uint = 0xFFCC00,fireColorOut:uint = 0xE22D09){
これで何が出来るかと言うと、炎の色が変えられる。今回、どうしても青い炎を作りたかったので変更。
TeraClockのココを変えました!
次にTeraClockだが、new
した直後にhours
を取得した所、何故か0だった。
- var clock:TeraClock = new TeraClock(2);
- trace(clock.hours);//常に0
どうやら、時刻の設定をENTER_FRAME
のイベントハンドラ内でのみ行っていたのが原因らしい。通常、時計であれば毎秒表示を更新するだろうからあまり問題にはならないのかも知れないが、今回俺が作ったのは1時間ごとにしか変更されないので、ちょっと困る。
そこで、コンストラクタ内で1回、無理矢理イベントハンドラ関数を呼び出してみた。
- public function TeraClock(GMT:int = 9) {
- _gmt = GMT%24;
- this.enterFrameListener(null);//←ここを追加
- addEventListener(Event.ENTER_FRAME, enterFrameListener);
- }
文字盤
炎は、半径85の円上に並んでいるので、半径90の文字盤を作ってください誰か。
それとも、文字盤を読み込んで動くブログパーツっぽいものにしてみるか・・・無理か?