這次的困難點是擺盪時的數度變化
因為flash的MovieClip物件本身就有提供 rotation 這項物件旋轉的功能
所以在描述時就簡單多了
可以想成如下圖....
總之程式大致是這樣...
(若要使用 需要把全行空白替換掉)
//創造一個容器並繪製圖像(若要使用 需要把全行空白替換掉)
var ObjBox = new MovieClip();
ObjBox.name="ObjBox";
ObjBox.Pic = new Shape();
ObjBox.Pic.graphics.beginFill(0xFFCC00);
ObjBox.Pic.graphics.lineStyle(0,0x666666);
ObjBox.Pic.graphics.moveTo(0,0);
ObjBox.Pic.graphics.lineTo(0,60);
ObjBox.Pic.graphics.moveTo(0,60);
ObjBox.Pic.graphics.lineTo(40,120);
ObjBox.Pic.graphics.lineTo(-40,120);
ObjBox.Pic.graphics.endFill();
ObjBox.x=100;
ObjBox.y=100;
addChild(ObjBox);
ObjBox.addChild(ObjBox.Pic);
MouseTouchObj(ObjBox,true);//導入
function MouseTouchObj(MC:MovieClip,BtnMode:Boolean=false){
MC.buttonMode=BtnMode;//讓手指出現
MC.addEventListener(Event.ENTER_FRAME,RotaDo);
MC.TM_MovePower=0;
MC.SP=5;//引力動量
MC.SP_N=2;//引力差
MC.SError=0.5;//停止誤差
MC.MousePower=0;//滑鼠力量
MC.addEventListener(MouseEvent.ROLL_OVER,ROLLDo);
function RotaDo(e){
var TempMC = e.currentTarget;
TempMC.TM_X=mouseX;
//==========Action
if( (TempMC.TM_MovePower==0 && (TempMC.rotation==0 ||TempMC.rotation==undefined)) == false ){
TempMC.TM_MovePower += -1*(TempMC.rotation/180) * TempMC.SP_N * TempMC.SP;
TempMC.rotation+=TempMC.TM_MovePower;
TempMC.TM_MovePower*=(39/40);
//===
if(TempMC.SError>Math.abs(TempMC.TM_MovePower) && TempMC.SError>Math.abs(TempMC.rotation)){
TempMC.TM_MovePower=0;
TempMC.rotation=0;
}
}
}
function ROLLDo(e){
var TempMC = MovieClip(e.currentTarget);
if(TempMC.TM_X==undefined){TempMC.TM_X=mouseX}
if(TempMC.rotation<25 && TempMC.rotation>-25)
var TempN = TempMC.TM_X-mouseX;
if(Math.abs(TempN)>5){
TempMC.MousePower = TempN;
TempMC.TM_MovePower += int(20 * (((TempN)<0) ? -1*Math.sqrt(-1*TempN/10) : Math.sqrt(TempN/10)))/20;
}
}
}
沒有留言:
張貼留言