让图片直线移动到鼠标点击位置,类似游戏里的人物走动!

 
  1. <body onclick="moveImg(event);">
  2. <div style="position:absolute;left:0px;top:0px;" id="img"><img src="img.gif"></div>
  3. </body>
  4. <script>
  5.     var img=document.getElementById("img");
  6.     var time=5;//时间,单位毫秒
  7.     var speed=2;//(speed/time)速度,单位象素,起点到终点的直线速度
  8.     var moveObj=null;
  9.     function moveImg(event){
  10.         var eventevent=event||window.event;
  11.         if(moveObj!=null){
  12.             window.clearInterval(moveObj);
  13.             moveObj=null;
  14.         }
  15.         var imgX=parseInt(img.style.left);
  16.         var imgY=parseInt(img.style.top);
  17.         var moveX=event.clientX;
  18.         var moveY=event.clientY;
  19.         var x=moveX-imgX;
  20.         var y=moveY-imgY;
  21.         //计算速度基数
  22.         var speedspeedNum=speed/Math.sqrt(x*x+y*y);
  23.         //计算X轴速度
  24.         var speedX=speedNum*x;
  25.         //计算Y轴速度
  26.         var speedY=speedNum*y;        
  27.         //alert(speedX+":"+speedY);
  28.         //移动图片
  29.         moveObj=window.setInterval(function(){moveImage(speedX,speedY,moveX,moveY);},time);
  30.     }
  31.     var mx=0;my=0;
  32.     function moveImage(x,y,endX,endY){
  33.         //由于网页上left属性改变量小于1的时候,按1改变,所以计算出当移动量大于1时才改变left属性
  34.         mxmx=mx+x;
  35.         var m=Math.floor(mx);
  36.         if(m<0){
  37.             m++;
  38.         }
  39.         if(m>=1 || m<=-1){
  40.             img.style.left=(parseInt(img.style.left)+m)+"px";
  41.             mxmx=mx-m;
  42.         }
  43.         //由于网页上top属性改变量小于1的时候,按1改变,所以计算出当移动量大于1时才改变top属性
  44.         mymy=my+y;
  45.         var n=Math.floor(my);
  46.         if(n<0){
  47.             n++;
  48.         }
  49.         if(n>=1 || n<=-1){
  50.             img.style.top=(parseInt(img.style.top)+n)+"px";
  51.             mymy=my-n;
  52.         }
  53.         //当移动到指定位置时停止移动
  54.         var xflag=false;
  55.         var yflag=false;
  56.         if(x>=0){
  57.             if(parseInt(img.style.left)>=endX){
  58.                 xflag=true;
  59.             }
  60.         }else{
  61.             if(parseInt(img.style.left)<=endX){
  62.                 xflag=true;
  63.             }
  64.         }
  65.         if(y>=0){
  66.             if(parseInt(img.style.top)>=endY){
  67.                 yflag=true;
  68.             }
  69.         }else{
  70.             if(parseInt(img.style.top)<=endY){
  71.                 yflag=true;
  72.             }
  73.         }
  74.         if(xflag && yflag){
  75.             window.clearInterval(moveObj);
  76.             moveObj=null;
  77.         }
  78.     }
  79. </script>


http://blog.csdn.net/lip009/archive/2007/11/15/1887357.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要让人物模型按指定的路径来回走动,可以采用以下步骤: 1. 创建路径 首先,需要在场景中创建路径。可以使用Unity的Path工具,或者手动在场景中放置一些参考物体,然后根据它们创建路径。 2. 添加动画控制器 接下来,需要为人物模型添加动画控制器。在动画控制器中,可以定义人物模型需要执行的动画。 3. 实现路径跟随 将人物模型放置在路径的起点,并且让它跟随路径移动。可以使用Unity的NavMesh Agent组件,或者自己编写脚本实现路径跟随。 4. 实现往返移动人物模型到达路径终点时,需要让它往回走动。可以编写脚本实现往返移动,或者使用Unity的Animation事件。 下面是一个简单的示例代码,实现了一个往返移动人物模型: ```csharp using UnityEngine; using System.Collections; public class PathFollow : MonoBehaviour { public Transform[] waypoints; // 路径点 public float speed = 2.0f; // 移动速度 private int currentWaypoint = 0; // 当前路径点 private bool forward = true; // 是否向前移动 void Update() { // 计算移动方向 Vector3 direction = waypoints[currentWaypoint].position - transform.position; direction.y = 0; // 忽略y轴的移动 direction.Normalize(); // 移动人物模型 transform.Translate(direction * speed * Time.deltaTime, Space.World); // 到达路径点时,更新路径点 if (Vector3.Distance(transform.position, waypoints[currentWaypoint].position) < 0.1f) { if (forward) { currentWaypoint++; if (currentWaypoint >= waypoints.Length) { currentWaypoint = waypoints.Length - 2; forward = false; } } else { currentWaypoint--; if (currentWaypoint < 0) { currentWaypoint = 1; forward = true; } } } } } ``` 这个代码实现了一个往返移动人物模型,它会按照路径来回移动,并且可以控制移动速度。在使用时,只需要将路径点拖到waypoints数组中即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值