Hatena::Groupactionscript

ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記

2009年04月05日 日曜日

ENTER_FRAMEについて

| 11:01 | ENTER_FRAMEについて - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - ENTER_FRAMEについて - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 ENTER_FRAMEについて - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 のブックマークコメント

CBCNET > Dots & Lines > 寺井周平 > 土日Flashのススメ(6):サムネイルメニューについて考える」を読んで、そうそうこれがしたかった、と思いFlexで書いてみました。何となく動くのですが、書きつつ気になったことがあります。それは、「Event.ENTER_FRAME」です。

Flexとか、ActionScript3で、フレームの扱いってどうするんだろう?とだいぶ気になりました。おそらく、アニメーションの時には必要になるんだろうなあ。

特に、on_mouseしている間、というイベントはどうやってとろうか。悩みました。そこで、使ったのが、Enter_Frameだったりしました。


参考

fscroll.as

package
{
	import flash.display.*;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.*;
	import mx.core.UIComponent;
	import mx.events.*;

	public class FScroll extends UIComponent
	{			
			public var s:Sprite     = new Sprite();
			public var left:Sprite  = new Sprite();
			public var right:Sprite = new Sprite();
			
			public var speed:Number = 0;
			
			public var fillType:String = GradientType.LINEAR;
			public var colors:Array = [0x000000, 0xffffff];
			public var alphas:Array = [1, 1];
			public var ratios:Array = [0x00,0xff];
			public var matr:Matrix = new Matrix();
			public var spreadMethod:String = SpreadMethod.PAD;
			
			public function FScroll():void
			{
				this.setup();
			}

			public function setup():void
			{
				matr.createGradientBox(2000, 20, 0, 0, 0);
				s.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
				//s.graphics.beginFill(0xffffff);
				s.graphics.drawRect(0,0,2000,200);
				s.graphics.endFill();
				addChild(s);
			
				left.graphics.beginFill(0x000000,0.5);
				left.graphics.drawRect(0,0,100,200);
				left.graphics.endFill();
				addChild(left);

				right.graphics.beginFill(0x000000,0.5);	
				right.graphics.drawRect(0,0,100,200);
				left.graphics.endFill();
				addChild(right);

				// event
				addEventListener(Event.ENTER_FRAME,postionSetUp);
				left.addEventListener(MouseEvent.MOUSE_OVER,leftRollOver);
				left.addEventListener(MouseEvent.MOUSE_OUT,rollStop);
				right.addEventListener(MouseEvent.MOUSE_OVER,rightRollOver);
				right.addEventListener(MouseEvent.MOUSE_OUT,rollStop);
			}

			private function postionSetUp(event:Event):void
			{
				right.x = parent.width - 100;
			}

			private function onEnterFrame(event:Event):void
			{
				if((s.x >= 0) && (speed > 0)){
					speed = 0;
				}

				if( (Math.abs(s.x) >= (Math.abs(s.width - stage.stageWidth))) && (speed < 0) ){
					speed = 0;
				}
				
				s.x = s.x + speed;
				//trace(Math.abs(s.x));
			}

			private function leftRollOver(event:Event):void
			{
				speed = -20;
				addEventListener(Event.ENTER_FRAME, onEnterFrame);				
			}

			private function rightRollOver(event:Event):void
			{
				speed = 20;
				addEventListener(Event.ENTER_FRAME, onEnterFrame);				
			}

			private function rollStop(event:Event):void
			{
				speed = 0;
			}
	}
}