シェイプの組み合わせで作る時計

[ Flash ] 2009/12/28 8

シェイプの組み合わせで作る時計

シェイプトゥイーンの動く様はかわいいので、組み合わせたらシンプルな時計が作れるのではと思いました。
数字は奥が深くて面白い。
デジタル時計は切り替わりの表現として見がちだけど、時間は本当は曖昧な線として存在するのではと思います。

シェイプの組み合わせで作る時計

スクリーンセイバーもあります。zipを解凍してインストーラーをご利用ください。

シェイプの組み合わせで作る時計:スクリーンセイバー

ActionScript3.0で3D的に放たれる光(移動や色変更)

[ Flash ] 2009/01/12 3

ActionScript3.0で3D的に放たれる光(移動や色変更)

ActionScript2.0から3.0に移行しようとして試行錯誤中。せっかく3.0でやるのだから3D的なものを作りたかった、実験です。

—————————————-

(1)とりあえずステージ上にランダムにMovieClipを配置する処理。
見る

import flash.display.*;
import flash.events.*;
import flash.utils.*;

var ballS:Sprite = new Sprite();//ballSというスプライトを作って
addChild(ballS);//表示リストに加える。
var timer:Timer = new Timer(40, 0);//0.04秒ごとに永遠に繰り返します
timer.addEventListener(TimerEvent.TIMER,onTick);
function onTick (evt:TimerEvent):void {
 var ball:ballInstance = new ballInstance();//ballInstanceはあらかじめリンケージされてる。
 
 var xMax:int = 24;//0から24のランダムな整数を取得する。
 var xMin:int = 0;
 var xRandomInt:int = Math.floor(Math.random()*(xMax-xMin+1))+xMin;//厳密に計算したランダム
 var ballX:Number=xRandomInt*25;//ballInstanceの横幅は25px。
 
 var yMax:int = 16;
 var yMin:int = 0; 
 var yRandomInt:int = Math.floor(Math.random()*(yMax-yMin+1))+yMin;
 var ballY:Number=yRandomInt*25;
 
 ball.x=ballX;
 ball.y=ballY;
 ballS.addChild(ball);//表示リストにボールを加える。
}
timer.start();

—————————————-

(2)それを移動させる。
見る

import flash.display.*;
import flash.events.*;
import flash.utils.*;

var ballS:Sprite = new Sprite();
addChild(ballS);
var timer:Timer = new Timer(40, 0);
timer.addEventListener(TimerEvent.TIMER,onTick);
function onTick (evt:TimerEvent):void {
 var ball:ballInstance = new ballInstance();
 ball.x=ball.y=-100;
 
 var xMax:int = 10;
 var xMin:int = -10;
 var xRandomInt:int = Math.floor(Math.random()*(xMax-xMin+1))+xMin;
 var ballX:Number=xRandomInt*100;
 
 var yMax:int = 10;
 var yMin:int = -10;
 var yRandomInt:int = Math.floor(Math.random()*(yMax-yMin+1))+yMin;
 var ballY:Number=yRandomInt*100;
 
 ballS.addChild(ball);
 
 ball.alpha=0;//ballの透明度の初期値を0(全部透明)に設定。
 ball.addEventListener(Event.ENTER_FRAME, alphaChange);
 function alphaChange(event:Event):void {//フレームに入るたびに0.08ずつ加算
  ball.alpha+=0.08;
 }
 
 var ballZ:Number=1000;//3Dっぽい処理をさせるための変数
 var scale:Number;//3Dっぽい処理をさせるための変数
 var fl:Number=100;//3Dっぽい処理をさせるための変数
 ball.addEventListener(Event.ENTER_FRAME, zahyoChange);
 function zahyoChange(event:Event):void {
  ballZ-=20;//どんどんballZの値を減らして
  scale=fl/(fl+ballZ);//scaleっていう変数にぶち込む
  ball.x=ballX*scale+300;//ballのx座標の位置
  ball.y=ballY*scale+200;//ballのy座標の位置
  ball.scaleX=ball.scaleY=scale*5;//ballの横幅・縦幅。
  if(ballZ<-100){
   ball.removeEventListener(Event.ENTER_FRAME, zahyoChange);
   ball.removeEventListener(Event.ENTER_FRAME, alphaChange);
   ball.alpha=0;
  }
 }
}
timer.start();

—————————————-

(3)さらに色変更の処理。その上にマウス位置による処理。たのしい。
見る

import flash.display.*;
import flash.events.*;
import flash.utils.*;

var ballS:Sprite = new Sprite();
addChild(ballS);
var timer:Timer = new Timer(20, 0);
timer.addEventListener(TimerEvent.TIMER,onTick);
function onTick (evt:TimerEvent):void {
 var ball:ballInstance = new ballInstance();
 ball.x=ball.y=-100;
 
 var date:Date;
 date = new Date();
 var pikaN:Number;
 pikaN=Math.floor(date.milliseconds/10)%6;
 if(pikaN==1){//以下、やる気のないif文。一括で出したいところですね。
  var colorTransformA:ColorTransform = ball.transform.colorTransform;
  colorTransformA.color = 0x1b98a3;
  ball.transform.colorTransform = colorTransformA;
 }
 if(pikaN==2){
  var colorTransformB:ColorTransform = ball.transform.colorTransform;
  colorTransformB.color = 0x1b7ba3;
  ball.transform.colorTransform = colorTransformB;
 }
 if(pikaN==3){
  var colorTransformC:ColorTransform = ball.transform.colorTransform;
  colorTransformC.color = 0x1b5ea3;
  ball.transform.colorTransform = colorTransformC;
 }
 if(pikaN==4){
  var colorTransformD:ColorTransform = ball.transform.colorTransform;
  colorTransformD.color = 0x4e1ba3;
  ball.transform.colorTransform = colorTransformD;
 }
 if(pikaN==5){
  var colorTransformE:ColorTransform = ball.transform.colorTransform;
  colorTransformE.color = 0x7b1ba3;
  ball.transform.colorTransform = colorTransformE;
 }
 if(pikaN==0){
  var colorTransformF:ColorTransform = ball.transform.colorTransform;
  colorTransformF.color = 0xa31b98;
  ball.transform.colorTransform = colorTransformF;
 }
 
 var xMax:int = 10;
 var xMin:int = -10;
 var xRandomInt:int = Math.floor(Math.random()*(xMax-xMin+1))+xMin;
 var ballX:Number=xRandomInt*100;
 
 var yMax:int = 10;
 var yMin:int = -10;
 var yRandomInt:int = Math.floor(Math.random()*(yMax-yMin+1))+yMin;
 var ballY:Number=yRandomInt*100;
 
 ballS.addChild(ball);
 
 ball.alpha=0;
 ball.addEventListener(Event.ENTER_FRAME, alphaChange);
 function alphaChange(event:Event):void {
  ball.alpha+=0.08;
 } 
 
 var ballZ:Number=1000;
 var scale:Number;
 var fl:Number=100;
 ball.addEventListener(Event.ENTER_FRAME, zahyoChange);
 function zahyoChange(event:Event):void {
  ballZ-=20;
  scale=fl/(fl+ballZ);
  ballX+=(300-mouseX)/10;//マウス位置による処理うんぬん。
  ballY+=(200-mouseY)/10;
  ball.x=ballX*scale+300;
  ball.y=ballY*scale+200;
  ball.scaleX=ball.scaleY=scale*5;
  if(ballZ<-100){
   ball.removeEventListener(Event.ENTER_FRAME, zahyoChange);//ここの削除のやり方がイマイチ。
   ball.removeEventListener(Event.ENTER_FRAME, alphaChange);//本当はballをremoveChildしてnullにするんですよね。うーん。
   ball.alpha=0;
  }
 }
}
timer.start();

—————————————-

画面外に出たballをきちんと削除出来てないので、重いです。 CPUに大きい負荷がかかると思う。

参考にしたサイト
ActionScript3.0 でMovieClipの色を変更する
ActionScript3.0でattachMovie
AS3.0に対応するために覚えなければならない事
Lesson3 3D表現にチャレンジしよう!

 Prev 1 2 3 4

pagetop