求as3物体移动算法

舞台上已有一个mc实例名称为sp,速度(speed)=3,鼠标点击一下舞台的某个位置,sp慢慢的向鼠标点击的位置移动,求实例代码(as3)... 舞台上已有一个mc实例名称为sp,速度(speed) = 3,鼠标点击一下舞台的某个位置,sp慢慢的向鼠标点击的位置移动,求实例代码(as3) 展开
 我来答
jicemoon
2013-07-23 · TA获得超过772个赞
知道小有建树答主
回答量:622
采纳率:66%
帮助的人:676万
展开全部

下面是核心代码

private function onMouseClickHandle(evt:MouseEvent):void
  {
   //记录目标位置
   targetPosX = evt.stageX; 
   targetPosY = evt.stageY;
   
   //分别记录x方向和y方向上的速度
   var ang:Number = Math.atan2(targetPosY - mc.y, targetPosX - mc.x);
   speedX = speed * Math.cos(ang);
   speedY = speed * Math.sin(ang);
   
   //设置mc运动
   isMove = true;
  }

上面的方法是在点击舞台的时候调用

private function onEnterFrameHandle(evt:TimerEvent):void
  {
   if(!isMove)
   {
    return;
   }
   if(Math.sqrt((mc.x - targetPosX) * (mc.x - targetPosX) + (mc.y - targetPosY) * (mc.y - targetPosY)) < 2 )
   {
    //如果mc和目标位置的距离小于2,将设置mc不可运动,将mc位置调至目标位置
    isMove = false;
    mc.x = targetPosX;
    mc.y = targetPosY;
   }
   else
   {
    mc.x += speedX;
    mc.y += speedY;
   }
  }

上面的方法是在Event.ENTER_FRAME中触发,我这里用的是Timer

详细的代码,请看附件,直接新建一个Fla(Actionscript 3.0)文档  将此类设置为文档类,测试,就会出效果了,不明白的话  Hi我

小小zzq
2013-07-23 · 超过27用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:65.9万
展开全部
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.events.Event;

var speed:Number = 3;
var stp:Point;
var edp:Point;
var timeValue:Number;
var timeValueSpeed:Number;
stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
function onMouseDown(e:MouseEvent):void
{
    stp = new Point(sp.x,sp.y);
    edp = new Point(mouseX,mouseY);
    timeValue = 0;
    timeValueSpeed = speed/edp.subtract(stp).length;
    removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
function onEnterFrame(e:Event):void
{
    timeValue = Math.min(1,timeValue+timeValueSpeed);
    var p:Point = Point.interpolate(edp,stp,timeValue);
    sp.x = p.x;
    sp.y = p.y;
    if(timeValue >= 1)
    {
        removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    }
}
追问
谢谢你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
畅395
2013-07-25 · 超过30用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:39.6万
展开全部
var ax:Number;
var ay:Number;
var aa:Number;
var ab:Number;
var bx:Number;
var by:Number;
var a1:Timer=new Timer(100);
var a2:Timer=new Timer(100);
var a3:Timer=new Timer(100);
var a4:Timer=new Timer(100);
var a5:Timer=new Timer(100);
a1.addEventListener(TimerEvent.TIMER,b1);
a2.addEventListener(TimerEvent.TIMER,b2);
a3.addEventListener(TimerEvent.TIMER,b3);
a4.addEventListener(TimerEvent.TIMER,b4);
a5.addEventListener(TimerEvent.TIMER,b);
stage.addEventListener(MouseEvent.CLICK,b5)
function b1(event:TimerEvent):void
{
    sp_mc.x+=aa;
}
function b2(event:TimerEvent):void
{
    sp_mc.x-=aa;
}
function b3(event:TimerEvent):void
{
    sp_mc.y+=ab;
}
function b4(event:TimerEvent):void
{
    sp_mc.y-=ab;
}
function b5(event:MouseEvent):void
{
    a5.start();
ax=mouseX;
    ay=mouseY;
    bx=sp_mc.x;
    by=sp_mc.y;
    if(ax>bx)
    {
        aa=(ax-bx)/20;
        a1.start();
    }
    else if(bx>ax)
    {
        aa=(bx-ax)/20;
        a2.start();
    }
    if(ay>by)
    {
        ab=(ay-by)/20;
        a3.start();
    }
    else if(by>ay)
    {
      ab=(by-ay)/20
        a4.start();
    }
}
function b(event:TimerEvent):void 
{
    bx=sp_mc.x;
    by=sp_mc.y;
    if(ax<bx
      && ay<by)
    {
if((by-ay)<10
    && (bx-ax)<10)
{
    a1.stop();
    a2.stop();
    a3.stop();
    a4.stop();
    a5.stop();
}
    }
    else if(ax>bx
    && ay>by)
    {
        if((ay-by)<10
    && (ax-bx)<10)
{
    a1.stop();
    a2.stop();
    a3.stop();
    a4.stop();
    a5.stop();
}
    }
    else if(ax>bx
    && ay<by)
    {
 if((by-ay)<10
     && (ax-bx)<10)
{
    a1.stop();
    a2.stop();
    a3.stop();
    a4.stop();
    a5.stop();
}
    }
    else if(ax<bx
    && ay>by)
    {
if((ay-by)<10
    && (bx-ax)<10)
{
    a1.stop();
    a2.stop();
    a3.stop();
    a4.stop();
    a5.stop();
}
    }
}

 我的就不能看看吗?也是会来的。

至少采取一下嘛。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yaoyue1019
2013-07-23 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部
推荐你去用一下greensock这个库

import com.greensock.TweenLite;

后面在代码里面写
var sp:Sprite = new Sprite();
//xxxxxx对sp的初始化
TweenLite.to(sp,1,{x:100,y:100});

greensock这个缓动库 对于很多运动都打包的很好 除了直线运动 变速运动 bezier曲线什么的都能用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式