
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表現にチャレンジしよう!
最近のコメント