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;
}
} 展开
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;
}
} 展开
3个回答
展开全部
鼠标跟随动画
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;
}
}
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;
}
}
展开全部
整体来看,应该是个鼠标跟随代码。点击哪里动画就飞到哪里。
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);//根据反三角函数,获取当前的⋯⋯我靠,这谁写的,这个变量完全没用处,浪费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结束*/
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询