ID: FN1301001 |
Platform: All |
Version: CS6/ActionScript 3.0 |
Runtime: Flash Player 11/AIR 3.0 |
Tweenクラス
|
パッケージ
|
starling.animation
|
継承
|
Tween → EventDispatcher → Object
|
Tween()コンストラクタ
|
文法
|
public function Tween(target:Object, time:Number, transition:Object = "linear")
|
概要
|
トゥイーン設定のための新たなTweenオブジェクトをつくる。
|
引数
|
target:Object − トゥイーンさせるオブジェクト。
time:Number − トゥイーンにかける秒数。
transition:Object − トゥイーンの変化を定める文字列または関数(Functionデータ型)。文字列の場合には、Transitionsクラスの定数を用いる。デフォルト値はイージングのない等速を示すTransitions.LINEAR("linear")。
|
reset()メソッド
|
文法
|
public function reset(target:Object, time:Number, transition:Object = "linear"):Tween
|
概要
|
参照したTweenオブジェクトは初期化して、引数の設定を与える。
|
引数
|
target:Object − トゥイーンさせるオブジェクト。
time:Number − トゥイーンにかける秒数。
transition:Object − トゥイーンの変化を定める文字列または関数(Functionデータ型)。文字列の場合には、Transitionsクラスの定数を用いる。デフォルト値はイージングのない等速を示すTransitions.LINEAR("linear")。
|
戻り値
|
初期化されたTweenインスタンス自身。
|
targetプロパティ
|
文法
|
target:Object
|
プロパティ値
|
[読取り専用] トゥイーンさせるオブジェクト。
|
実装
|
public function get target():Object
|
totalTimeプロパティ
|
文法
|
totalTime:Number
|
プロパティ値
|
[読取り専用] トゥイーンにかける秒数。
|
実装
|
public function get totalTime():Number
|
transitionプロパティ
|
文法
|
transition:String
|
プロパティ値
|
[読取り専用] トゥイーンの変化を定める文字列。
|
実装
|
public function get transition():String
|
説明
Starlingフレームワークのstarling.animation.Tweenクラスを用いると、インスタンスのトゥイーンアニメーションがスクリプトで定められます。ActionScript 3.0に定義済みのfl.transitions.Tweenクラスとは、少し使い勝手が違うことにご注意ください。
Tweenインスタンスをつくるには、トゥイーンさせるオブジェクトとアニメーションにかける秒数をふたつの引数として、コンストラクタメソッドに渡します。また、第3引数にTransitionsクラスの定数で、トゥイーンに与えるイージングが定められます。第3引数を省くと、イージングのない等速の変化になります。
new Tween(対象オブジェクト, 秒数, イージング)
3つの引数で定められた値は、TweenインスタンスのプロパティTween.targetとTween.totalTimeおよびTween.transitionでそれぞれ調べられます。いずれも読取り専用のプロパティですので、設定は変えられません。
コンストラクタに渡した3つの引数の設定を変えたいときは、改めてTween()コンストラクタで新たなインスタンスをつくり直すか、Tween.reset()メソッドでインスタンスを初期化します。Tween.reset()メソッドに渡す3つの引数は、コンストラクタと同じです(後述「実装」参照)。
Tweenオブジェクト.reset(対象オブジェクト, 秒数, イージング)
Tweenオブジェクトを新たにつくるより、Tween.reset()メソッドで使い回す方が、メモリの消費は抑えられ、処理を速めることにもつながります。
両メソッドの第3引数として用いるTransitionsクラスの定数には、イージングのないデフォルトの等速(定数Transitions.LINEAR)以外に16のイージングが備わっています[*1]。下表001のように値の変わり方が標準・反動・バウンド・弾力の4種類あり、それぞれについてトゥイーンの始まりと終わりにどう変化を加えるか4つずつのバリエーションがあります。
表001■Transitionsクラスのイージングを定める定数
変化
|
定数
|
in
|
out
|
in-out
|
out-in
|
標準
|
EASE_IN
|
EASE_OUT
|
EASE_IN_OUT
|
EASE_OUT_IN
|
反動
|
EASE_IN_BACK
|
EASE_OUT_BACK
|
EASE_IN_OUT_BACK
|
EASE_OUT_IN_BACK
|
バウンド
|
EASE_IN_BOUNCE
|
EASE_OUT_BOUNCE
|
EASE_IN_OUT_BOUNCE
|
EASE_OUT_IN_BOUNCE
|
弾力
|
EASE_IN_ELASTIC
|
EASE_OUT_ELASTIC
|
EASE_IN_OUT_ELASTIC
|
EASE_OUT_IN_ELASTIC
|
Tween()コンストラクタとTween.reset()メソッドの第3引数には、トランジションの関数を定めることもできます。その場合、引数には時間に比例して0から1まで変わる値を受取り、引数に応じて変化する0から1が基本となる値を返します。
function トランジション関数(ratio:Number):Number
たとえば、イージングがなく、等速で変化させる関数(linear)はつぎのように定めることになります。
function linear(ratio:Number):Number {
return ratio;
}
|
[*1]「Starling Framework Reference」の「Transitions」クラスのページ冒頭に、16のイージングがグラフで掲げられています。
|
例
「StarlingフレームワークのTweenクラスを使ったアニメーション」に、Tween()コンストラクタの使い方を始め、Tweenクラスによるトゥイーンアニメーションについての基本を解説しました。詳しくは、このノートをお読みください。
そのスクリプト002として、つぎのようなStarlingルートクラスをご紹介しました。3つのTweenインスタンスに異なるイージングを定め、順にトゥイーンアニメーションさせる例です。これはTween.reset()メソッドで、Tweenオブジェクトを使い回すように書替えることができます。
// ActionScript 3.0クラス定義ファイル: MySprite.as
- package {
- import starling.core.Starling;
- import starling.display.Sprite;
- import starling.display.Quad;
- import starling.events.Event;
- import starling.animation.Tween;
- import starling.animation.Transitions;
- public class MySprite extends Sprite {
- private var myQuad:Quad;
- private var myTransitions:Vector.<String>;
- private var positionsX:Vector.<Number>;
- private var duration:Number = 4;
- public function MySprite() {
- addEventListener(Event.ADDED_TO_STAGE, initialize);
- }
- private function initialize(eventObject:Event):void {
- var nRight:Number = stage.stageWidth;
- myTransitions = new <String>[
- Transitions.EASE_IN_OUT_ELASTIC,
- Transitions.EASE_IN_OUT_BOUNCE,
- Transitions.EASE_OUT_IN_ELASTIC
- ];
- positionsX = new <Number>[nRight, 0, nRight];
- myQuad = new Quad(50, 10, 0x0000FF);
- myQuad.pivotX = myQuad.width / 2;
- myQuad.pivotY = myQuad.height / 2;
- myQuad.y = stage.stageHeight / 2;
- addChild(myQuad);
- nextTween();
- }
- private function nextTween():void {
- var nLength:uint = myTransitions.length;
- if (nLength > 0) {
- var myTransition:String = myTransitions.shift();
- var positionX:Number = positionsX.shift();
- var myTween:Tween = new Tween(myQuad, duration, myTransition);
- myTween.moveTo(positionX, myQuad.y);
- Starling.juggler.add(myTween);
- myTween.onComplete = nextTween;
- }
- }
- }
- }
|
前掲Starlingルートクラス(MySprite)には、つぎのような手を加えます。書替えたクラス全体は、後にスクリプト001として掲げます(行番号はこのスクリプトにもとづきます)。まず、Tweenオブジェクトを使い回すため、インスタンスローカル変数でなくvar宣言したプロパティ(myTween)に納めます(第10行目)。
トゥイーンを定めるメソッド(nextTween())は、Tweenオブジェクト(myTween)がすでにつくられたかどうかを先に確かめます(第33行目)。まだオブジェクトがなければ、新たなTweenインスタンスをコンストラクタでつくります(第36行目)。そして、すでにTweenオブジェクトがあれば、Tween.reset()メソッドでそれを使い回します(第34行目)。
- private var myTween:Tween;
- private function nextTween():void {
- var nLength:uint = myTransitions.length;
- if (nLength > 0) {
- var myTransition:String = myTransitions.shift();
- var positionX:Number = positionsX.shift();
// var myTween:Tween = new Tween(myQuad, duration, myTransition);
- if (myTween) {
- myTween.reset(myQuad, duration, myTransition);
- } else {
- myTween = new Tween(myQuad, duration, myTransition);
- }
- myTween.moveTo(positionX, myQuad.y);
- Starling.juggler.add(myTween);
- myTween.onComplete = nextTween;
- } else {
- trace(myTween.target, myTween.totalTime, myTween.transition); // 確認用
- myTween = null;
- }
- }
|
なお、3つのトゥイーンアニメーションがすべて済んだら、Tweenオブジェクトのプロパティ(myTween)にはnullを与えて参照を消しています(第41〜44行目)。この処理が行われたことを確かめるため、trace()関数でTween.reset()メソッドが引数に定めた3つのプロパティ値を[出力]しました。[出力]パネルには、それぞれの値がつぎのように示されます。Starlingルートクラス(MySprite)全体は、以下のスクリプト001のとおりです。
[object Quad] 4 easeOutInElastic
スクリプト001■Tween.reset()メソッドでTweenオブジェクトを使い回して順にアニメーションさせる
// ActionScript 3.0クラス定義ファイル: MySprite.as
- package {
- import starling.core.Starling;
- import starling.display.Sprite;
- import starling.display.Quad;
- import starling.events.Event;
- import starling.animation.Tween;
- import starling.animation.Transitions;
- public class MySprite extends Sprite {
- private var myQuad:Quad;
- private var myTween:Tween;
- private var myTransitions:Vector.<String>;
- private var positionsX:Vector.<Number>;
- private var duration:Number = 4;
- public function MySprite() {
- addEventListener(Event.ADDED_TO_STAGE, initialize);
- }
- private function initialize(eventObject:Event):void {
- var nRight:Number = stage.stageWidth;
- myTransitions = new <String>[
Transitions.EASE_IN_OUT_ELASTIC,
Transitions.EASE_IN_OUT_BOUNCE,
Transitions.EASE_OUT_IN_ELASTIC
];
- positionsX = new <Number>[nRight, 0, nRight];
- myQuad = new Quad(50, 10, 0x0000FF);
- myQuad.pivotX = myQuad.width / 2;
- myQuad.pivotY = myQuad.height / 2;
- myQuad.y = stage.stageHeight / 2;
- addChild(myQuad);
- nextTween();
- }
- private function nextTween():void {
- var nLength:uint = myTransitions.length;
- if (nLength > 0) {
- var myTransition:String = myTransitions.shift();
- var positionX:Number = positionsX.shift();
- if (myTween) {
- myTween.reset(myQuad, duration, myTransition);
- } else {
- myTween = new Tween(myQuad, duration, myTransition);
- }
- myTween.moveTo(positionX, myQuad.y);
- Starling.juggler.add(myTween);
- myTween.onComplete = nextTween;
- } else {
- trace(myTween.target, myTween.totalTime, myTween.transition); // 確認用
- myTween = null;
- }
- }
- }
- }
|
実装
TweenクラスのコンストラクタTween()は、内部的にTween.reset()メソッドを直ちに呼出しています。したがって、インスタンスが使い回せるときは、Tween.reset()メソッドを用いる方が、コンストラクタで新たなインスタンスをつくるより速いでしょう。
public function Tween(target:Object, time:Number, transition:String = "linear") {
reset(target, time, transition);
}
|
参考
[Starling Framework Reference] > [Tween]
作成者: 野中文雄
更新日: 2013年1月20日 Starling 1.3の更新にもとづき、Tween()コンストラクタとTween.reset()メソッドの第3引数に関数を定める場合について補足。
作成日: 2013年1月2日