get/setアクセサメソッドで関連する値も更新する
ところで,
メソッドが具体的にやっているのは,
public class EllipticMotion extends MovieClip {
// private var degree:Number = 0;
private var _degree:Number = 0; // プロパティ名変更
// ...[中略]...
private function get degree():Number { // 追加定義
return _degree;
}
// private function update():void { // setアクセサメソッドに変更
private function set degree(nDegree:Number):void {
// degree = (degree%360+360)%360;
_degree = (nDegree%360+360)%360;
// var radian:Number=degree*DEGREE_TO_RADIAN;
var radian:Number = _degree * DEGREE_TO_RADIAN;
cos = Math.cos(radian);
sin = Math.sin(radian);
}
get/
public function EllipticMotion(nDegree:Number, myCenter:Point, myRadius:Point) {
degree = nDegree;
center = myCenter;
radius = myRadius;
addEventListener(Event.ENTER_FRAME, rotate);
// update();
setRotation();
}
private function rotate(eventObject:Event):void {
degree += speed;
// update();
setRotation();
}
これで,
スクリプト2 角度をget/
// 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 var speed:Number = 5;
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;
addEventListener(Event.ENTER_FRAME, rotate);
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);
}
private function rotate(eventObject:Event):void {
degree += speed;
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;
}
}
}