BLOG atama-switch
for の初期化メモ
- 2010-11-22 (月)
- Flash
メモ。
for (var i:int = 0, len:int = hogeArray.length; i < len; i++) { trace(hogeArray[i]); } |
カンマで区切って1行で変数を宣言する方法はあんまり書かないんだけど
for の初期化内だとスッキリしてイイかもー
- Comments: 0
- Trackbacks: 0
3D お勉強中
- 2010-08-04 (水)
- Flash
「ActionScript3.0 アニメーション」と「明解 3次元コンピュータグラフィックス」を参考にしならがら3次元幾何変換と行列のお勉強。
平行移動(translation)、スケール変換(scaling)、回転(rotation)のテスト。
あと、せん断(shear)と反射(reflection)とか行列で求める事ができるらしい。行列って不思議。
これでやっとFlashPlayer10のビルトイン関数をさわれる気がする。
- Comments: 0
- Trackbacks: 0
actionscript3.0 で カルーセル
- 2010-06-21 (月)
- Flash
カルーセルな動き(無限ループするヤツ)をさせる為のクラス書いた。
CarouselData.as
/** * @author atama-switch */ package { // flash import flash.display.DisplayObject; import flash.events.Event; import flash.events.EventDispatcher; /** * CarouselData クラス */ public class CarouselData extends EventDispatcher { // coordX public function get coordX():Number { return _coordX; } public function set coordX(value:Number):void { if(value != _coordX) { _coordX = value; updateHorizontal(); } } private var _coordX:Number = 0; // coordY public function get coordY():Number { return _coordY; } public function set coordY(value:Number):void { if(value != _coordY) { _coordY = value; updateVertical(); } } private var _coordY:Number = 0; // x public function get x():Number { return _x; } public function set x(value:Number):void { _x = value; } private var _x:Number = 0; // y public function get y():Number { return _y; } public function set y(value:Number):void { _y = value; } private var _y:Number = 0; // height public function get height():Number { return _height; } public function set height(value:Number):void { _height = value; } private var _height:Number = 0; // width public function get width():Number { return _width; } public function set width(value:Number):void { _width = value; } private var _width:Number = 0; // limitLeft public function get limitLeft():Number { return _limitLeft; } public function set limitLeft(value:Number):void { _limitLeft = value; } private var _limitLeft:Number = 0; // limitRight public function get limitRight():Number { return _limitRight; } public function set limitRight(value:Number):void { _limitRight = value; } private var _limitRight:Number = 0; // limitTop public function get limitTop():Number { return _limitTop; } public function set limitTop(value:Number):void { _limitTop = value; } private var _limitTop:Number = 0; // limitBottom public function get limitBottom():Number { return _limitBottom; } public function set limitBottom(value:Number):void { _limitBottom = value; } private var _limitBottom:Number = 0; // carouselArray public function get data():Array { return _data; } private var _data:Array = new Array(); // gutter public function get gutter():Number { return _gutter; } public function set gutter(value:Number):void { _gutter = value; } private var _gutter:Number = 0; // direction public function get direction():String { return _direction; } public function set direction(value:String):void { _direction = value; } private var _direction:String = "horizontal";// horizontal or vertical /** * 新しい CarouselData インスタンスを作成します。 */ public function CarouselData( initObject:Object = null ) { for ( var parame in initObject ){ // 繰り返すスクリプト if (this.hasOwnProperty(parame)) { this[parame] = initObject[parame]; } } } // push public function push ( target:DisplayObject ):void { _data.push( { x : target.x, y : target.y, width : target.width, height : target.height } ); if(_direction == "horizontal") _width += target.width + _gutter; if(_direction == "vertical") _height += target.height + _gutter; } // updateHorizontal public function updateHorizontal ( e:Event = null):void { var distance:Number = (_coordX - _x); distance = Number(distance.toFixed(3)); _x += distance; for (var i:int = 0; i < _data.length; i++) { _data[i].x += distance; if (_data[i].x < (_limitLeft - (_data[i].width + _gutter)) && distance < 0) { // 左の画面外に出たら一番右に移動 _data[i].x += _width; } else if (_data[i].x >= _limitRight && distance > 0) { // 右の画面外に出たら一番左に移動 _data[i].x -= _width; } } dispatchEvent( new Event(Event.CHANGE) ); } // updateVertical public function updateVertical ( e:Event = null):void { var distance:Number = (_coordY - _y); distance = Number(distance.toFixed(3)); _y += distance; for (var i:int = 0; i < _data.length; i++) { _data[i].y += distance; if (_data[i].y < (_limitTop - (_data[i].height + _gutter)) && distance < 0) { // 上の画面外に出たら一番下に移動 _data[i].y += _height; } else if (_data[i].y >= _limitBottom && distance > 0) { // 下の画面外に出たら一番上に移動 _data[i].y -= _height; } } dispatchEvent( new Event(Event.CHANGE) ); } } } |
使うときはこんな感じ
package { // flash import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.events.Event; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.text.*; // CarouselData import CarouselData; public class Main extends Sprite { private var _mcNum:Number = 16; private var _gutter:Number = 8; // 横 // _carouselDataHorizontal private var _carouselDataHorizontal:CarouselData; // _mcHorizontalArray private var _mcHorizontalArray:Array; // _horizontalSprite private var _horizontalSprite:Sprite; // _horizontalSpriteMask private var _horizontalSpriteMask:Sprite; // 縦 // _carouselDataVertical private var _carouselDataVertical:CarouselData; // _mcVerticalArray private var _mcVerticalArray:Array; // _verticalSprite private var _verticalSprite:Sprite; // _verticalSpriteMask private var _verticalSpriteMask:Sprite; // ------------------------------------------------------------------------------------------------- // //コンストラクタ public function Main() { //ステージスケールモード設定 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; init(); } // ------------------------------------------------------------------------------------------------- // // ------------------------------------------------------------------------------------------------- // // 初期化 private function init ():void { // _carouselDataHorizontal _carouselDataHorizontal = new CarouselData( { limitLeft : 0, limitTop : 0, limitRight : 360, limitBottom : 80, gutter : _gutter, direction : "horizontal" } ); // _horizontalSprite _horizontalSprite = new Sprite(); _horizontalSprite.graphics.beginFill( 0xF5F5F5 ); _horizontalSprite.graphics.drawRect(0, 0, 360, 80); _horizontalSprite.graphics.endFill(); _horizontalSprite.x = 30; _horizontalSprite.y = 10; addChild(_horizontalSprite); // _horizontalSpriteMask _horizontalSpriteMask = new Sprite(); _horizontalSpriteMask.graphics.beginFill( 0xF5F5F5 ); _horizontalSpriteMask.graphics.drawRect(0, 0, 360, 80); _horizontalSpriteMask.graphics.endFill(); _horizontalSpriteMask.x = 30; _horizontalSpriteMask.y = 10; addChild(_horizontalSpriteMask); // mask _horizontalSprite.mask = _horizontalSpriteMask; // _mcHorizontalArray _mcHorizontalArray = new Array(); var i:int = 0; var box:Sprite; var tf:TextField; for (i = 0; i < _mcNum; i++) { box = new Sprite(); box.graphics.beginFill(0xFFFFFF * Math.random()); box.graphics.drawRect(0, 0, 80, 80); box.graphics.endFill(); tf = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.selectable = false; tf.mouseEnabled = false; tf.text = "Box" + String(i); box.addChild( tf ); box.x = (i * 80) + (_gutter * ( i + 1 )); box.y = 0; _horizontalSprite.addChild(box); _mcHorizontalArray.push( box ); _carouselDataHorizontal.push( _mcHorizontalArray[i] ); } _carouselDataHorizontal.addEventListener( Event.CHANGE, onChangeHorizontal ); addEventListener( Event.ENTER_FRAME, onEnterFrameHorizontal ); // _carouselDataVertical _carouselDataVertical = new CarouselData( { limitLeft : 0, limitTop : 0, limitRight : 80, limitBottom : 272, gutter : _gutter, direction : "vertical" } ); // _verticalSprite _verticalSprite = new Sprite(); _verticalSprite.graphics.beginFill( 0xF5F5F5 ); _verticalSprite.graphics.drawRect(0, 0, 80, 272); _verticalSprite.graphics.endFill(); _verticalSprite.x = 30; _verticalSprite.y = 100; addChild(_verticalSprite); // _verticalSpriteMask _verticalSpriteMask = new Sprite(); _verticalSpriteMask.graphics.beginFill( 0xF5F5F5 ); _verticalSpriteMask.graphics.drawRect(0, 0, 80, 272); _verticalSpriteMask.graphics.endFill(); _verticalSpriteMask.x = 30; _verticalSpriteMask.y = 100; addChild(_verticalSpriteMask); // mask _verticalSprite.mask = _verticalSpriteMask; // _mcVerticalArray _mcVerticalArray = new Array(); for (i = 0; i < _mcNum; i++) { box = new Sprite(); box.graphics.beginFill(0xFFFFFF * Math.random()); box.graphics.drawRect(0, 0, 80, 80); box.graphics.endFill(); tf = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.selectable = false; tf.mouseEnabled = false; tf.text = "Box" + String(i); box.addChild( tf ); box.x = 0; box.y = (i * 80) + (_gutter * ( i + 1 )); _verticalSprite.addChild(box); _mcVerticalArray.push( box ); _carouselDataVertical.push( _mcVerticalArray[i] ); } _carouselDataVertical.addEventListener( Event.CHANGE, onChangeVertical ); addEventListener( Event.ENTER_FRAME, onEnterFrameVertical ); } // ------------------------------------------------------------------------------------------------- // // ------------------------------------------------------------------------------------------------- // private function onChangeHorizontal( e:Event ):void { for (var i:int = 0; i < _carouselDataHorizontal.data.length; i++) { _mcHorizontalArray[i].x = _carouselDataHorizontal.data[i].x; _mcHorizontalArray[i].y = _carouselDataHorizontal.data[i].y; } } // ------------------------------------------------------------------------------------------------- // // ------------------------------------------------------------------------------------------------- // private function onEnterFrameHorizontal( e:Event ):void { _carouselDataHorizontal.coordX += 1; } // ------------------------------------------------------------------------------------------------- // // ------------------------------------------------------------------------------------------------- // private function onChangeVertical( e:Event ):void { for (var i:int = 0; i < _carouselDataVertical.data.length; i++) { _mcVerticalArray[i].x = _carouselDataVertical.data[i].x; _mcVerticalArray[i].y = _carouselDataVertical.data[i].y; } } // ------------------------------------------------------------------------------------------------- // // ------------------------------------------------------------------------------------------------- // private function onEnterFrameVertical( e:Event ):void { _carouselDataVertical.coordY += 1; } // ------------------------------------------------------------------------------------------------- // } } |
CarouselData.as は縦か横かのどちらかでしか動作させないので変数名はもうちょっとすっきりできそう。
↓参考にさせていただきました。感謝。
ActionScript 3.0で始めるオブジェクト指向スクリプティング:第12回 マウスポインタとスクロールの連動|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/as3/0012
FLASH-JP.COM – フォーラム > 無限ループ時のずれ
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=6803&forum=8&post_id=34361
- Comments: 1
- Trackbacks: 0
Progression4 で KTween
- 2010-02-18 (木)
- Flash
KTween – 軽量AS3用Tweenエンジンを公開! http://kawa.at.webry.info/201002/article_2.html
半日でフルスクラッチって、どんだけー。すごすぎ(>_<)
ダウンロードはこちら → http://code.google.com/p/kawanet/
Progression4 で使ってみたかったのでCommand化してました。
DoKTween.as
// DoKTween package { // nium import jp.nium.utils.ObjectUtil; // progression import jp.progression.commands.Command; import jp.progression.events.ExecuteEvent; // KTween import net.kawa.tween.KTween; import net.kawa.tween.easing.*; import net.kawa.tween.KTJob; /** * */ public class DoKTween extends Command { public function get target():Object { return _target; } public function set target( value:Object ):void { _target = value; } private var _target:Object; private var _job:KTJob; public function get duration():Number { return _duration; } public function set duration( value:Number ):void { _duration = value; } private var _duration:Number; public function get parameters():Object { return _parameters; } public function set parameters( value:Object ):void { _parameters = value; } private var _parameters:Object; public function get easeing():Function { return _easeing; } public function set easeing( value:Function ):void { _easeing = value; } private var _easeing:Function; public function get onUpdate():Function { return _onUpdate; } public function set onUpdate( value:Function ):void { _onUpdate = value; } private var _onUpdate:Function; private var _originalParameters:Object; /** * 新しい DoKTween インスタンスを作成します。 */ public function DoKTween( target:Object, duration:Number, parameters:Object, easeing:Function, initObject:Object = null ) { // 引数を設定する _target = target; _duration = duration; _parameters = parameters || { }; _easeing = easeing; // 親クラスを初期化します。 super( _executeFunction, _interruptFunction, initObject ); } /** * 破棄します。 */ private function _destroy():void { // 破棄する _job = null; _target = null; _easeing = null; _parameters = null; } /** * 実行されるコマンドの実装です。 */ private function _executeFunction():void { // 実行する _job = KTween.to( _target, _duration, _parameters, _easeing ); _job.onComplete = _complete; _job.onChange = _update; } /** * */ private function _complete():void { // 破棄する _destroy(); // 処理を終了する super.executeComplete(); } /** * */ private function _update():void { // イベントを送出する super.dispatchEvent( new ExecuteEvent( ExecuteEvent.EXECUTE_UPDATE, false, false, this ) ); // イベントハンドラメソッドを実行する if ( _onUpdate != null ) { _onUpdate.apply( scope || this ); } } /** * */ private function _error( errorScope:Object, metaError:Error ):void { errorScope; // 破棄する _destroy(); // 例外をスローする super.throwError( this, metaError ); } /** * 中断されるコマンドの実装です。 */ private function _interruptFunction():void { // 実行時間を 0 にする _duration = 0; // 中断する & 中断方法によって処理を振り分ける try { switch ( super.interruptType ) { case 0 : { _job.cancel(); break; } case 1 : { _job.abort(); break; } case 2 : { _job.complete(); break; } } } catch ( e:Error ) {} // 破棄する _destroy(); } /** * インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。 */ public override function clone():Command { return new DoKTween( _target, _duration, _parameters, _easeing, this ); } /* * toString */ override public function toString():String { return ObjectUtil.formatToString( this, super.className, super.id ? "id" : null, "target" ); } } } |
使う時はこんな感じ
// easing import net.kawa.tween.easing.*; // 中略 //DoKTween(target:Object, duration:Number, parameters:Object, ease:Function = null ,initObject:Object = null) var com:DoKTween = new DoKTween( targetObj, 1, { x : 300 }, Back.easeIn ); com.execute(); |
勢いで作ってみたんで、突っ込みあったらコメントしてもらえるとうれしいです。
- Comments: 0
- Trackbacks: 0
FlashDevelop のコードカラーリング
- 2010-02-08 (月)
- Flash
FlashDevelopのコードカラーがFlashIDEに近づける方法。
/FlashDevelop/Settings/Languages/AS3.xml
を 開いて 9行目あたりの as3-secondary-keywords 内にここのテキストをコピペする。
あとは FlashDevelop ツールバー の Tools > Syntax Coloring を開いてword と word2 の Foreground に色を指定する。
自分は 0x1518ff を指定。
これでかなりFlashIDE のカラーリングに近づいた!ヤッホー!
念の為、AS3.xml はバックアップしてから試した方がいいかもー!
- Comments: 0
- Trackbacks: 0