20日に「大阪てら子 17」行ってきました。
Flashの勉強会で、今回のテーマは「時計」。
せっかくなので僕もなんか作って発表しようと思いました。
でもただの時計作っていくのは面白くない。
というわけで数字を廃止。
既存の時計の形を打ち崩そうと思い、出来上がったのがコチラ。
上から時間、分、秒となっています。
左から0,1,2,3,・・・と数えます。
この時計の特徴はパッと見では時間が分からないところ。
むしろ知らなければこれが時計ということすら分からない。
時間はすぐ分かった方がいいという意見が大多数でしょうが、少し考えてみてください。
何をそんなに急ぐ必要があるのかと。
そんなメッセージを込めました。
まあ後付けですが(笑)
反省点は、使い道がまったくないところ^^;
あとボールがバウンドするアクションはTweener使った方が楽だったかな、と。
一応ソース。(TeraClockはコチラ)
※クラスパスに注意。
○ドキュメントクラス
package myAs{
import myAs.Bounds;
import myAs.TeraClock;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Clock extends Sprite{
private var tClk:TeraClock;
private var b_arr:Array = new Array();
private var mb_arr:Array = new Array();
private var hb_arr:Array = new Array();
function Clock(){
tClk = new TeraClock();
//addEventListener(Event.ENTER_FRAME, entF);
init();
}
private function init(){
//ball
for(var i=0;i<60;i++){
var ball:Sprite = new Sprite();
if(i%5 == 0){
ball.graphics.beginFill(0x00ffff);
}else {
ball.graphics.beginFill(0xffffff);
}
ball.graphics.drawCircle(0, 0, stage.stageWidth/60/2);
ball.graphics.endFill();
ball.y = stage.stageHeight - ball.height/2;
b_arr[i] = ball;
if(i != 0){
b_arr[i].x = b_arr[i-1].x + b_arr[i].width;
}else {
b_arr[i].x = b_arr[i].x + b_arr[i].width/2;
}
addChild(b_arr[i]);
}
for(var v=0;v<60;v++){
var mball:Sprite = new Sprite();
if(v%5 == 0){
mball.graphics.beginFill(0x00ffff);
}else {
mball.graphics.beginFill(0xffffff);
}
mball.graphics.drawCircle(0, 0, stage.stageWidth/60/2);
mball.graphics.endFill();
mball.y = stage.stageHeight*2/3 - mball.height/2;
mb_arr[v] = mball;
if(v != 0){
mb_arr[v].x = mb_arr[v-1].x + mb_arr[v].width;
}else {
mb_arr[v].x = mb_arr[v].x + mb_arr[v].width/2;
}
addChild(mb_arr[v]);
}
for(var k=0;k<24;k++){
var hball:Sprite = new Sprite();
if(k%5 == 0){
hball.graphics.beginFill(0x00ffff);
}else {
hball.graphics.beginFill(0xffffff);
}
hball.graphics.drawCircle(0, 0, stage.stageWidth/24/2);
hball.graphics.endFill();
hball.y = stage.stageHeight/3 - hball.height/2;
hb_arr[k] = hball;
if(k != 0){
hb_arr[k].x = hb_arr[k-1].x + hb_arr[k].width;
}else {
hb_arr[k].x = hb_arr[k].x + hb_arr[k].width/2;
}
addChild(hb_arr[k]);
}
tClk.addEventListener(TeraClock.SECONDS_CHANGED, secChg);
}
private function entF(e:Event):void{
hour.text = tClk.hours2;
min.text = tClk.minutes2;
sec.text = tClk.seconds2;
}
private function secChg(e:Event):void {
var sh:uint = stage.stageHeight;
var num:uint = tClk.seconds;
var mNum:uint = tClk.minutes;
var hNum:uint = tClk.hours;
var bObj:Bounds = new Bounds(b_arr[num], sh);
if(tClk.seconds%5==0){
var mbObj:Bounds = new Bounds(mb_arr[mNum], sh*2/3);
var hbObj:Bounds = new Bounds(hb_arr[hNum], sh/3);
}
}
}
}
○Boundsクラス
package myAs{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Bounds extends Sprite{
private var sp:Sprite;
private var vy:Number = 28;
private var g:Number = 3;
private var f:Number = 0.7;
private var sh:uint;
private var timer:Timer = new Timer(5000, 1);
function Bounds(sp:Sprite, sh:uint){
this.sp = sp;
this.sh = sh;
this.sp.addEventListener(Event.ENTER_FRAME, bounds);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerF);
timer.start();
}
private function bounds(e:Event):void{
vy -= g;
sp.y -= vy;
if(sp.y > sh-sp.height/2){
sp.y = sh-sp.height/2;
vy *= f;
vy = -vy;
}
}
private function timerF(e:TimerEvent):void{
this.sp.removeEventListener(Event.ENTER_FRAME, bounds);
timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerF);
}
}
}
勉強会の詳細はきっと
ここの中の人がキレイにレポートしてくれるはず!
個人的に一番面白いなと思ったのは↑の人の作品です。
タイムラインアニメーションすげえ。
んでFlashDevelopを体験させてもらったんだけど、めちゃくちゃ便利すぎて感動しました。
少し文字打つだけでサクサクコーディングができるという。
今までFlashのエディタでシコシコ頑張っていたのがアホらしくなりました(笑)
Mac版が無いのが悔やまれるけど、Flex Builderでも似たような感じみたいなので購入リスト入り。
さあそして飲み会にも参加したんですが、このブログにはってあるブロブパーツのとこの人がもうすごいのなんの。
もう勉強会であったことなんて忘れるぐらい色々貴重な話が聞けました。
総括してかなーり面白い勉強会でした。
以上!