ジグザグ時計 – wonderfl build flash online
コードは、
http://wonderfl.net/c/dEsm
にあります。
flocessingのドキュメントはこちら。
今回はflocessingを使ってみたくて、簡単なサンプルを作ってみました。
コンストラクタ
39〜51行目のコンストラクタで、初期設定をしています。
drawDefaultLine
41行目のdrawDefaultLineメソッドの処理内容は、108〜113行目に書いてあります。
flocessingで使えるメソッドであるstrokeとlineを使ってます。
109行目のstroke(0xffffff,1);は、線の色を設定しています。第一引数が色で、第二引数がアルファ。
110〜112行目のlineメソッドの使い方は、
line(x1,y1,x2,y2);
上記の様な感じで、線を開始する点と終わる点を記述します。
addText
43〜45行目のメソッドaddTextは、「hours」、「minutes」、「seconds」を画面に表示させてるメソッドです。
内容は、115行目〜127行目に書いてあります。
まず、116行目〜118行目でテキストの設定をしています。今回は、117行目で色を白に設定し、118行目でサイズを30にしました。
次に、120行目〜122行目でテキストフィールドのインスタンス化と設定を行ってます。
123行目の
addField.text = word;
で、第一引数に指定された文字列を入れてます。
125行目の
addField.y = (stage.stageHeight / 3) * lineNumber - addField.height;
で、第二引数lineNumberを使って、yの値を設定しています。
ここで考えたのが、今回は縦に3分割するレイアウトとしたので、lineNumberには上から何番目かの数字を代入する様にしました。
例えば、minutesだったら、上から2番目なので44行目にある様に、addText(“minutes”, 2)と呼び出す様にしてあります。
これはあんまり汎用的ではないかも…….
126行目でaddChildして表示させます。
addHoursTextField
48行目〜50行目のaddHoursTextFieldメソッドは、数字が表示されるテキストフィールドを配置するメソッドです。
基本的には、addTextと殆ど同じです。128行目〜136行目にあります。
129行目〜132行目で、テキストフィールドの設定を行ってます。今回は、第一引数にテキストフィールドのインスタンスが指定されてます。
133行目〜135行目で、xとyと位置を決めて、addChildしてます。yの値の出し方は、addTextと同様。
この時点では、テキストフィールドは配置されたけど、その中には何も書かれてません。
最終的にDateで取得した時間が入ります。
ここまでで、コンストラクタ内にあるメソッドの説明は終了です。
次はdrawメソッドです。flocessignを使った場合、クラス内にdraw()を書くと、勝手にenterframeで
繰り返してくれるらしいです。初期設定で止める事も出来るけど、今回は止めずに使ってみました。
54行目〜57行目で、現在の時間を取得して、時間、分、秒を各々変数に格納してます。
で、58〜66行目のif文ですが、条件の(nowSeconds != seconds)は、一秒毎に処理される様に書いてます。
65行目のnowSeconds = seconds;で、今の秒数を変数nowSecondsに格納して、それと等しくなければ(1秒経ったら)
if文を実行します。drawメソッドは、enterframeで実行されていているけど、if文の中身は、1秒に一回だけの処理でいいので、
こうしました。
で、今度はif文の中。
createPoints
59行目〜61行目で実行しているcreatePointsメソッドについて。
このメソッドは、最終的にジグザグの波形を作る時のポイントを格納する配列を返すメソッドです。
第一引数に時間(ジグザグの数)、第二引数に、中心となるyの値を指定します。
メソッドの内容は75行目〜99行目です。
まず77行目のif文で、第一引数が0じゃないかどうかを分岐してます。
もし0なら、(0分とか、0秒とか)ジグザグにする必要がないので分岐してます。
で、その中の78行目〜94行目のfor文で、ポイントを配列に格納していきます。
79行目〜81行目は変数の定義
82行目の
xPoint = stageWidth/3*2-25 - (halfBase*(points - i));
は、格納するポイントのxの値です。
stageWidth/3*2-25は、画面の右側の、ジグザグが表示されるスペースの幅の中央です。
そこから、第一引数pointからi分引いた数と、山の半分の値である変数halfBaceをかけた値を引けば、
一番最初の山のxポイントが解ります。説明がむずかしい…..

次は、yの値ですが、ジグザグにするには、偶数か奇数かをif文で分岐し、さらに繰り返し処理の最初と最後もyの値を変えなくちゃなりません。その処理が、83行目〜91行目です。
最初の条件の(i==0 || i == points*2)は、最初と最後の繰り返しです。
この時のyの値は第二引数で指定したHeightになります。
次の条件(i%2)は奇数の時です。
この時のyの値は第二引数で指定したHeightから50を引いた値になります。
最後は偶数のとき。
この時のyの値は第二引数で指定したHeightに50を足した値になります。
92行目で変数xPointと変数yPointを使ってPointのインスタンス化をしています。
で、93行目で配列newArrayに格納します。
96行目と97行目で、ジグザグ線の開始位置と終了位置のポイントを配列に格納しています。
開始位置はunshiftで最初に、終了位置はpushで最後に格納しています。
で、98行目でreturnします。
drawLine
次に62行目〜64行目で使っているdrwLineメソッドです。このメソッドは、第一引数に(ポイントが入った)配列を、第二引数に数値を取ります。第二引数の数値は、色の情報です。
内容は、101行目〜106行目です。
これはfor文とflocessingのstrokeとlineを使って、配列に格納されたポイントを順番に読み取って、線を書いていっています。
104行目の
line(point[i].x,point[i].y,point[i+1].x,point[i+1].y);
は、配列pointの、今の繰り返し番号?(iの事)の、xおよびyの値から、
その次の繰り返し番号(i+1)のxおよびyまで線を引いています。(日本語にすると余計難しい…)
67行目〜69行目で、addTextFieldで作った空っぽのテキストフィールドに時間を入れてます。
右側のString(hours + 100).substring(1)等の説明は、以前の記事に書いてあります。
http://blog.jokerstyle.org/archives/420
70行目〜72行目で、colorTransformで、色を消していってます。
以上で説明終了です。
終了ですが、とっても解りづらい説明になってしまった……
それに、正直もう少しブラッシュアップ出来そうな気がしてます。特にポイントを配列に格納したりする処理は、
別のクラスの方がいい気がする…..
もう少し勉強しなきゃ。