Tweensy - onUpdate/onComplete
onUpdate/onCompleteイベントをTweensyで設定してみる。
Tweenerと大きく違う部分は、Tweensy.to()/Tweensy.from()/Tweensy.fromTo()の戻り値のTweensyTimelineオブジェクトに対して、onUpdate/onCompleteをFunction型で設定すること。 また、TweensyTimelineオブジェクトに対して、onUpdateParams/onCompleteParamsをArray型で設定することができ、onUpdate/onCompleteで設定したfunctionに引数として渡される。
今回は円を描いたSpriteをランダムな座標に動かし、scaleX/scaleYもランダムに変化させる。
onUpdateParams/onCompleteParamsにスタート時と現在と目標の座標とscaleを引数として設定し、onUpdate時とonComplete時にスタート時と現在と目標の座標とscaleをTextFieldに表示することにする。onComplete時に再度Tweensy.to()を設定しているので、再帰的に動き続ける。
- ActionScript
- TestTweensy_5.as
- Source
package {
import com.flashdynamix.motion.Tweensy;
import com.flashdynamix.motion.TweensyTimeline;
import fl.motion.easing.Quadratic;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
[SWF(backgroundColor = 0x000000, width = 600, height = 400, frameRate = 30)]
public class TestTweensy_5 extends Sprite {
private var _circle:Sprite;
private var _textField:TextField;
public function TestTweensy_5() {
initTextField();
initCircle();
startCircleTweensy();
}
private function initTextField():void {
_textField = new TextField();
var textField:TextField = _textField;
var textFormat:TextFormat = new TextFormat('_等幅', 10, 0xffffff);
textField.defaultTextFormat = textFormat;
textField.autoSize = TextFieldAutoSize.LEFT;
addChild(textField);
}
private function initCircle():void {
_circle = new Sprite();
var circle:Sprite = _circle;
var graphics:Graphics = circle.graphics;
graphics.beginFill(0x0099cc);
graphics.drawCircle(0, 0, 10);
graphics.endFill();
circle.x = Math.random() * stage.stageWidth;
circle.y = Math.random() * stage.stageHeight;
addChildAt(circle, 0);
}
private function startCircleTweensy():void {
var circle:Sprite = _circle;
var targetX:Number = Math.random() * stage.stageWidth;
var targetY:Number = Math.random() * stage.stageHeight;
var targetScaleX:Number = 1 + Math.random() * 3;
var targetScaleY:Number = 1 + Math.random() * 3;
var timeline:TweensyTimeline = Tweensy.to(circle, { x: targetX, y: targetY, scaleX: targetScaleX, scaleY: targetScaleY }, 3, Quadratic.easeOut, 1);
timeline.onUpdate = onCircleUpdate;
timeline.onUpdateParams = [circle.x, circle.y, circle.scaleX, circle.scaleY, targetX, targetY, targetScaleX, targetScaleY];
timeline.onComplete = onCircleComplete;
timeline.onCompleteParams = [circle.x, circle.y, circle.scaleX, circle.scaleY, targetX, targetY, targetScaleX, targetScaleY];
}
private function onCircleUpdate(startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
updateTextField('onCircleUpdate\n', startX, startY, startScaleX, startScaleY, targetX, targetY, targetScaleX, targetScaleY);
}
private function onCircleComplete(startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
updateTextField('onCircleComplete\n', startX, startY, startScaleX, startScaleY, targetX, targetY, targetScaleX, targetScaleY);
startCircleTweensy();
}
private function updateTextField(text:String, startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
var circle:Sprite = _circle;
text += 'START x = ' + startX.toString() + '\n';
text += ' y = ' + startY.toString() + '\n';
text += ' scaleX = ' + startScaleX.toString() + '\n';
text += ' scaleY = ' + startScaleY.toString() + '\n';
text += 'CURRENT x = ' + circle.x.toString() + '\n';
text += ' y = ' + circle.y.toString() + '\n';
text += ' scaleX = ' + circle.scaleX.toString() + '\n';
text += ' scaleY = ' + circle.scaleY.toString() + '\n';
text += 'TARGET x = ' + targetX.toString() + '\n';
text += ' y = ' + targetY.toString() + '\n';
text += ' scaleX = ' + targetScaleX.toString() + '\n';
text += ' scaleY = ' + targetScaleY.toString();
_textField.text = text;
}
}
}- package {
- import com.flashdynamix.motion.Tweensy;
- import com.flashdynamix.motion.TweensyTimeline;
- import fl.motion.easing.Quadratic;
- import flash.display.Graphics;
- import flash.display.Sprite;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import flash.text.TextFormat;
- [SWF(backgroundColor = 0x000000, width = 600, height = 400, frameRate = 30)]
- public class TestTweensy_5 extends Sprite {
- private var _circle:Sprite;
- private var _textField:TextField;
- public function TestTweensy_5() {
- initTextField();
- initCircle();
- startCircleTweensy();
- }
- private function initTextField():void {
- _textField = new TextField();
- var textField:TextField = _textField;
- var textFormat:TextFormat = new TextFormat('_等幅', 10, 0xffffff);
- textField.defaultTextFormat = textFormat;
- textField.autoSize = TextFieldAutoSize.LEFT;
- addChild(textField);
- }
- private function initCircle():void {
- _circle = new Sprite();
- var circle:Sprite = _circle;
- var graphics:Graphics = circle.graphics;
- graphics.beginFill(0x0099cc);
- graphics.drawCircle(0, 0, 10);
- graphics.endFill();
- circle.x = Math.random() * stage.stageWidth;
- circle.y = Math.random() * stage.stageHeight;
- addChildAt(circle, 0);
- }
- private function startCircleTweensy():void {
- var circle:Sprite = _circle;
- var targetX:Number = Math.random() * stage.stageWidth;
- var targetY:Number = Math.random() * stage.stageHeight;
- var targetScaleX:Number = 1 + Math.random() * 3;
- var targetScaleY:Number = 1 + Math.random() * 3;
- var timeline:TweensyTimeline = Tweensy.to(circle, { x: targetX, y: targetY, scaleX: targetScaleX, scaleY: targetScaleY }, 3, Quadratic.easeOut, 1);
- timeline.onUpdate = onCircleUpdate;
- timeline.onUpdateParams = [circle.x, circle.y, circle.scaleX, circle.scaleY, targetX, targetY, targetScaleX, targetScaleY];
- timeline.onComplete = onCircleComplete;
- timeline.onCompleteParams = [circle.x, circle.y, circle.scaleX, circle.scaleY, targetX, targetY, targetScaleX, targetScaleY];
- }
- private function onCircleUpdate(startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
- updateTextField('onCircleUpdate\n', startX, startY, startScaleX, startScaleY, targetX, targetY, targetScaleX, targetScaleY);
- }
- private function onCircleComplete(startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
- updateTextField('onCircleComplete\n', startX, startY, startScaleX, startScaleY, targetX, targetY, targetScaleX, targetScaleY);
- startCircleTweensy();
- }
- private function updateTextField(text:String, startX:Number, startY:Number, startScaleX:Number, startScaleY:Number, targetX:Number, targetY:Number, targetScaleX:Number, targetScaleY:Number):void {
- var circle:Sprite = _circle;
- text += 'START x = ' + startX.toString() + '\n';
- text += ' y = ' + startY.toString() + '\n';
- text += ' scaleX = ' + startScaleX.toString() + '\n';
- text += ' scaleY = ' + startScaleY.toString() + '\n';
- text += 'CURRENT x = ' + circle.x.toString() + '\n';
- text += ' y = ' + circle.y.toString() + '\n';
- text += ' scaleX = ' + circle.scaleX.toString() + '\n';
- text += ' scaleY = ' + circle.scaleY.toString() + '\n';
- text += 'TARGET x = ' + targetX.toString() + '\n';
- text += ' y = ' + targetY.toString() + '\n';
- text += ' scaleX = ' + targetScaleX.toString() + '\n';
- text += ' scaleY = ' + targetScaleY.toString();
- _textField.text = text;
- }
- }
- }
About this entry
You’re currently reading “Tweensy - onUpdate/onComplete,” an entry on jp.ferv.blog
- Published:
- Thu, May 14th, 2009 at 3:53 PM
- Author:
- dsk
- Category:
- Web
- Tags:
- ActionScript 3.0, Tweensy
No comments
Jump to comment form | comments rss | trackback uri