月別アーカイブ: 2009年12月

AS3 アコーディオンのインターフェース

クライアントワークでアコーディオン作成

http://wlc.la/test/0912/09/

所要時間1.5時間
割ときれいにかけたと思うけど、もうちょっと短い時間で。
これくらいは30分で作れるようになりたい。

[as]
package
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.utils.getDefinitionByName;
public class Preloader extends MovieClip
{

public function Preloader()
{
addEventListener(Event.ENTER_FRAME, checkFrame);
loaderInfo.addEventListener(ProgressEvent.PROGRESS,
progress);
// show loader
}

private function progress(e:ProgressEvent):void
{
// update loader
}

private function checkFrame(e:Event):void
{
if (currentFrame == totalFrames)
{
removeEventListener(Event.ENTER_FRAME,
checkFrame);
startup();
}
}

private function startup():void
{
// hide loader
stop();

loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
var mainClass:Class = getDefinitionByName(“Main”) as
Class;
addChild(new mainClass() as DisplayObject);
}

}

}
[/as]
[as]
package
{
import flash.display.*;
import flash.utils.Timer;
import flash.events.*;
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
public class Main extends Sprite{
private var _colorNames:Array = new Array(
0xbfbfbf,0×000000,0x56007d,
0x28aecf,0x7fc31c,0xe6a100,
0xe84600,0xd90000,0xf6004c
);
private var _colors:Array = new Array();
private var _colorDefaultWidth:int=80;
private var _timer:Timer;
private var _pointer:int = 0;
private var _check:Boolean = false;
private var _colorsContainer:Sprite = new Sprite();
private var _waitConter:int;
private var _mask:Sprite = new Sprite();
private var _clickColorID:int;
public function Main():void{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void{
stage.quality = StageQuality.BEST;
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_createColors();
}
private function _createColors():void{
var p:int=0;
for(var i:int=0;i<_colorNames.length;i++){
_colors[i] = new
ColorElement(_colorNames[i],_colorDefaultWidth,p,i);
_colorsContainer.addChild(_colors[i]);
_colors[i].x = stage.stageWidth;
p+=_colorDefaultWidth;
}
addChild(_colorsContainer);
_colorsContainer.x = 2;
_mask.graphics.beginFill(0×0000);
_mask.graphics.drawRect(2,0,720,276);
addChild(_mask);
_colorsContainer.mask=_mask;
_waitConter = i;
_timer = new Timer(300);
_timer.addEventListener(TimerEvent.TIMER,_start);
_timer.start();
}
private function _start(e:TimerEvent):void{
if(_pointer<_colorNames.length){
_colors[_pointer].gotoDefaultPos();

_colors[_pointer].addEventListener(ColorElement.INIT_POS,_posOK);

_colors[_pointer].addEventListener(ColorElement.COLOR_CLICK,_colorClick);
_pointer++;
}else{
_timer.stop();
}
}
private function _posOK(e:Event):void{
_waitConter–;
if(_waitConter==0){
_onPosOK();
}
}
private function _onPosOK():void{
for(var i:int=0;i<_colorNames.length;i++){
_colors[i].init();
}
}
private function _colorClick(e:Event):void{
//trace(this+" —— "+e.target.ID);
_clickColorID = e.target.ID;
_openColor(_clickColorID);
}
private function _openColor(c:int):void{
var _back:int = _colorNames.length-c-1;
var _front:int = c;
var _myTime:int = 2.4;
var p:Number = 0;
for(var i:int=0;ic;i–){
p-=_colorDefaultWidth/_back;
Tweener.addTween(
_colors[i],{
time:_myTime,x:p,transition:
“easeIn”
}
);
}
//trace(this+”———-”);
}
}
}
[/as]

[as]
package{
import flash.display.*;
import flash.events.*;
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
public class ColorElement extends Sprite{
private var _defaultWidth:int;
private var _longWidth:int = 640;
private var _defaultPoint:int;//x
private var _height:int=276;
private var _color:Number;
public var ID:int;
public static const INIT_POS:String =”INIT_POS”;
public static const COLOR_CLICK:String =”click”;
public function
ColorElement(c:Number,w:int,p:Number,id:int):void{
_defaultWidth = w;
_color = c;
_defaultPoint=p;
ID = id;
graphics.beginFill(_color);
graphics.drawRect(0,0,_defaultWidth,_height);
}
public function gotoDefaultPos():void{
//trace(this+”gotoDefaultPos”);
Tweener.addTween(
this,{
time:2.4,
x:_defaultPoint,
transition:”easeIn”,
onComplete:_initPos
}
);
}
private function _initPos():void{
dispatchEvent(new Event(ColorElement.INIT_POS));
//addEventListener(MouseEvent.MOUSE_UP,_onClick);
}
public function init():void{
//trace(this+”init”);
graphics.clear();
graphics.beginFill(_color);
graphics.drawRect(0,0,_longWidth,_height);
buttonMode = true;
}
private function _onClick(e:Event):void{
trace(this+”_onClickaa”);
//dispatchEvent(new
Event(ColorElement.COLOR_CLICK));
}
}
}
[/as]

FlashDevelopとswcではまったこと

FLASH CS3で作成した、グラフィカルなMovieClipのインスタンスを使いたかったの
で、SWC経由に挑戦。
SWCをAdd To Libraryにしたのにみつからんと怒られ一日。
FlexBuilderで作成したプロジェクトなのが原因かとFlashDevelopでプロジェクトを作り直し。
FlashIDEではなく、AS3のプロジェクトを作成。
FlashIDEはコンパイルにFLASHを利用するらしい。

うまくいった。今後は製作のはばが広がる!!

参考

http://level0.kayac.com/2009/11/swc.php

as3 Timerクラス

使い方テンプレ
[ActionScript]
//—読み込み
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.*;

//—変数
private var timeCounter:Timer;

//—実装部分
timeDropCounter = new Timer(70);
timeDropCounter.addEventListener(TimerEvent.TIMER,drop);

//—実行
private function drop(e:TimerEvent):void{

}
[/ActionScript]