flash as3.0求助 解读下列代码 200

importflash.events.MouseEvent;importflash.events.Event;stage.addEventListener(Event.E... import flash.events.MouseEvent;
import flash.events.Event;

stage.addEventListener(Event.ENTER_FRAME, onFrameLoop);
stage.addEventListener(MouseEvent.MOUSE_DOWN,down_handler);

var speed:Number = 5;

var stepx,mousex,theta:Number;
var stepy,mousey:Number;

function down_handler(evt:MouseEvent) :void{
mousex= evt.stageX;
mousey= evt.stageY;

}

function onFrameLoop(evt:Event):void {

var dx:Number = mousex - plane.x;
vardy:Number = mousey- plane.y;
varr:Number = Math.sqrt(dx*dx +dy*dy);

varradians:Number = Math.atan2(dy,dx);
theta=( Math.acos(dx/r))*(dy/Math.abs(dy)) *(180 /Math.PI);
plane.rotation= theta +90 ;

varstep:Number = r /speed;
varstepx:Number = Math.abs(dx) /step ;
varstepy:Number = Math.abs(dy) /step;

if(plane.y > mousey) {
plane.y-= stepy;
}

if (plane.y < mousey) {
plane.y+= stepy;
}

if (plane.x > mousex) {
plane.x-= stepx;
}

if (plane.x < mousex) {
plane.x+= stepx;
}

}
展开
 我来答
帐号已注销
2013-06-26 · TA获得超过1048个赞
知道小有建树答主
回答量:1015
采纳率:40%
帮助的人:513万
展开全部
鼠标跟随动画
import flash.events.MouseEvent;
import flash.events.Event;

stage.addEventListener(Event.ENTER_FRAME, onFrameLoop);//监听鼠标跟随动画
stage.addEventListener(MouseEvent.MOUSE_DOWN,down_handler);//监听鼠标按下

var speed:Number = 5; 鼠标跟随速度

var stepx,mousex,theta:Number;
var stepy,mousey:Number;

function down_handler(evt:MouseEvent) :void{
mousex= evt.stageX; 传递鼠标位置X坐标
mousey= evt.stageY; 传递鼠标位置Y坐标

}

function onFrameLoop(evt:Event):void {

var dx:Number = mousex - plane.x; 鼠标移动式画面X坐标移动量
vardy:Number = mousey- plane.y; 鼠标移动式画面X坐标移动量
varr:Number = Math.sqrt(dx*dx +dy*dy);

varradians:Number = Math.atan2(dy,dx);
theta=( Math.acos(dx/r))*(dy/Math.abs(dy)) *(180 /Math.PI); 计算摆动角度
plane.rotation= theta +90 ; 摆动角度

varstep:Number = r /speed;
varstepx:Number = Math.abs(dx) /step ;
varstepy:Number = Math.abs(dy) /step;

if(plane.y > mousey) {
plane.y-= stepy;
}

if (plane.y < mousey) {
plane.y+= stepy;
}

if (plane.x > mousex) {
plane.x-= stepx;
}

if (plane.x < mousex) {
plane.x+= stepx;
}

}
show3show
2013-06-26 · TA获得超过396个赞
知道小有建树答主
回答量:671
采纳率:0%
帮助的人:723万
展开全部

整体来看,应该是个鼠标跟随代码。点击哪里动画就飞到哪里。


import flash.events.MouseEvent;
import flash.events.Event;
 
stage.addEventListener(Event.ENTER_FRAME,  onFrameLoop);
//监听舞台刷新事件,这个事件会重复执行,执行频率与你设置的帧频有关,一般是每秒24次。也就是说,一秒钟会执行24次onFrameLoop函数,这是这个程序主要的驱动方式
stage.addEventListener(MouseEvent.MOUSE_DOWN,down_handler);
//监听鼠标按下事件,down_handler函数主要对当前的点击位置进行记录,真正产生位移动画的是上一个监听

var speed:Number = 5;
 
var stepx,mousex,theta:Number;
var stepy,mousey:Number;
 
function down_handler(evt:MouseEvent) :void{
    //记录鼠标坐标mousex,mousey
    mousex= evt.stageX;
    mousey= evt.stageY;

}
 
function onFrameLoop(evt:Event):void {//该函数每秒执行24次
    
    
        
    var dx:Number = mousex - plane.x;//获取当前鼠标点击位置和动画的x方向距离
    var dy:Number = mousey- plane.y;//获取当前鼠标点击位置和动画的y方向距离
    var r:Number = Math.sqrt(dx*dx +dy*dy);//根据勾股定理,计算出鼠标点击位置和动画的实际距离
        
    var radians:Number = Math.atan2(dy,dx);//根据反三角函数,获取当前的&#8943;&#8943;我靠,这谁写的,这个变量完全没用处,浪费CPU了,浪费可耻啊
    theta=( Math.acos(dx/r))*(dy/Math.abs(dy)) *(180 /Math.PI);//根据反三角函数,获取当前动画和鼠标点击位置所连直线与y轴的夹角。ps:好吧,我知道这句话很绕,请自己看,另外这里有一个逻辑漏洞,当r为0的时候会出错
    plane.rotation= theta +90 ;//转换成与x轴的夹角,并且调整了飞机的方向

    var step:Number = r /speed;//这三行应该一起解读,这里利用了相似三角型的办法。根据飞机的绝对速度是speed,分别得到飞机在x方向和y方向的速度。
    var stepx:Number = Math.abs(dx) /step ;//这两行其实可以不必用Math.abs来获取绝对值,原因在后面有解释
    var stepy:Number = Math.abs(dy) /step;

    
    //注意看下面这段代码,它实现了让飞机在Y方向位移的动画,这里其实完全不需要写这么多,只要一行 plane.y+= stepy就可以了(前提是在上面的地方你没用Math.abs)
    /*代码片段1开始*/
    if(plane.y > mousey) {
         plane.y-= stepy;
    }
 
    if (plane.y < mousey) {
         plane.y+= stepy;
    }
    /*代码片段1结束*/
 
     //同样的道理,下面的代码可以用plane.x+= stepx
    /*代码片段2开始*/
    if (plane.x > mousex) {
         plane.x-= stepx;
    }
 
    if (plane.x < mousex) {
         plane.x+= stepx;
    }       
     /*代码片段2结束*/
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丸灬号D
2013-06-26 · TA获得超过1738个赞
知道小有建树答主
回答量:1715
采纳率:59%
帮助的人:210万
展开全部
import flash.events.MouseEvent;//导入类
import flash.events.Event;//导入类
 
stage.addEventListener(Event.ENTER_FRAME,onFrameLoop);//在舞台上建立帧频监听,调用onFrameLoop方法
stage.addEventListener(MouseEvent.MOUSE_DOWN,down_handler);//当鼠标点击时触发down_handler方法

var speed:Number = 5;//声明变量speed为5
 
var stepx,mousex,theta:Number;//声明变量stepx,mousex,theta,数据类型为number
var stepy,mousey:Number;//声明变量stepy,mousey,数据类型为number
 
function down_handler(evt:MouseEvent) :void{//鼠标点击时触发的方法
         mousex= evt.stageX;//变量mousex等于鼠标x坐标
         mousey= evt.stageY;//变量mousey等于鼠标y坐标

}
 
function onFrameLoop(evt:Event):void {//帧频事件,根据帧频不断执行
        
    var dx:Number = mousex - plane.x;//声明变量dx等于变量mousex减去元件plane的x坐标
         var dy:Number = mousey- plane.y;//声明变量dx等于变量mousey减去元件plane的y坐标
         var r:Number = Math.sqrt(dx*dx +dy*dy);//声明变量r等于取变量dx乘dx+变量dy乘dy的平方根
        
         var radians:Number = Math.atan2(dy,dx);////声明变量radians等于给定的x轴及y轴坐标值的反正切值
         theta=( Math.acos(dx/r))*(dy/Math.abs(dy)) *(180 /Math.PI);//变量theta等于dx除以r的反余弦值乘以dy除以dy的绝对值乘以180除以π(目的是取得角度)
         plane.rotation= theta +90 ;//元件plane的角度等于变量theta+90

var step:Number = r /speed;//声明变量step等于r除以speed
         var stepx:Number = Math.abs(dx) /step ;//声明变量stepx等于dx的绝对值除以step
         var stepy:Number = Math.abs(dy) /step;//声明变量stepy等于dy的绝对值除以step

if(plane.y > mousey) {//如果plane的y轴坐标大于变量mousey
         plane.y-= stepy;//plane的y轴坐标不断减去stepy
}
 
if (plane.y < mousey) {//如果plane的y轴坐标小于变量mousey
         plane.y+= stepy;//plane的y轴坐标不断加stepy
}
 
if (plane.x > mousex) {//如果plane的x轴坐标大于变量mousex
         plane.x-= stepx;//plane的x轴坐标不断减去stepx
}
 
if (plane.x < mousex) {//如果plane的x轴坐标小于变量mousex
         plane.x+= stepx;//plane的x轴坐标不断加stepx
}       
 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式