この変更にともなって,
まずは,
public class EllipticMotion extends MovieClip {
// ...[中略]...
public function EllipticMotion(nDegree:Number, myCenter:Point, myRadius:Point) {
degree = nDegree;
center = myCenter;
radius = myRadius;
// addEventListener(Event.ENTER_FRAME, rotate); // 削除
setRotation();
}
続いて,
// private function rotate(eventObject:Event):void {
public function rotate(nSpeed:Number):void {
// degree += speed; // プロパティspeedは不要に
degree += nSpeed;
setRotation();
}
以上のふたつの修正を加えたのが,
スクリプト2 メソッドをタイムラインから呼出すように修正
// ActionScript 3.0クラス定義ファイル: EllipticMotion.as
// 回転するMovieClipシンボルの[クラス]に設定
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.Point;
public class EllipticMotion extends MovieClip {
private var _degree:Number = 0;
private const DEGREE_TO_RADIAN:Number = Math.PI / 180;
private var center:Point;
private var radius:Point;
private var cos:Number = Math.cos(degree * DEGREE_TO_RADIAN);
private var sin:Number = Math.sin(degree * DEGREE_TO_RADIAN);
public function EllipticMotion(nDegree:Number, myCenter:Point, myRadius:Point) {
degree = nDegree;
center = myCenter;
radius = myRadius;
setRotation();
}
private function get degree():Number {
return _degree;
}
private function set degree(nDegree:Number):void {
_degree = (nDegree % 360 + 360) % 360;
var radian:Number = _degree * DEGREE_TO_RADIAN;
cos = Math.cos(radian);
sin = Math.sin(radian);
}
public function rotate(nSpeed:Number):void {
degree += nSpeed;
setRotation();
}
function setRotation():void {
moveX();
moveY();
scale();
blur();
}
private function moveX():void {
x = center.x + cos * radius.x;
}
private function moveY():void {
y = center.y + sin * radius.y;
}
private function scale():void {
scaleX = scaleY = getIndexZ(0.8, 1);
scaleX *= getIndexZ();
}
private function blur():void {
var nBlur:Number = getIndexZ(4, 0);
var myBlur:BlurFilter = new BlurFilter(nBlur, nBlur/2);
filters = [myBlur];
}
private function getIndexZ(nMin:Number=-1, nMax:Number=1):Number {
var nIndexZ:Number = (nMax - nMin) * (sin + 1) / 2 + nMin;
return nIndexZ;
}
}
}
[ムービープレビュー]を試すと,