关于JS 斜线移动问题,本人尝试自己写一个类似游戏 人物移动的效果 但是走斜线的时候会有问题 不知道有什么算法还是怎么!我写的会乱跳动!
请不要发别人的例子 我自己下了很多但是很多不明白什么gril,神魔对决3那些 就不要发了!发了也没分!
说下思路和算法说明!做好有简单思路清晰的例子!
 也可以发我QQ邮箱
QQ:7527460
我自己的代码如下!
如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
<style type="text/css">
</style>
  <title>JavaScript Motion Sample</title>  <script language="JavaScript">
  var movingID = null;
  var scrolling = false;
var mx,my;
var ss=true;
function xy()
{
  ss=false;
  mx=event.clientX;//获得鼠标坐标,并记录当前坐标给变量
      my=event.clientY+25;//获得鼠标坐标,并记录当前坐标给变量,以便后面计算
}

  function startMove()
  {
     if(ss)
 {
  xy();
 }
   var left = eval(div1.style.left.replace("px", ""));
     var top =  eval(div1.style.top.replace("px", ""));
var dis= Math.sqrt(mx*mx+my*my);距离
 var times=dis/50;时间
if(times>0)
{
if(left==mx&&top>my)
{
  div1.style.top=top-my/times;
}
if(left==mx&&top<my)
{
  div1.style.top=top+my/times;
}
if(top==my&&left>mx)
{
div1.style.left=left-mx/times;
}
if(top==my&&left<mx)
{
div1.style.left=left+mx/times;
}
if(left>mx&&top>my)
{
div1.style.left=left-mx/times;
div1.style.top=top-my/times;
}
if(left<mx&&top>my)
{
 div1.style.left=left+mx/times;
 div1.style.top=top-my/times;
}
if(left<mx&&top<my)
{
div1.style.left=left+mx/times;
div1.style.top=top+my/times;
}
if(left>mx&&top<my)
{
div1.style.left=left-mx/times;
div1.style.top=top+my/times;
}
if(left==mx||top==my)
{
 stopMove();
 }
    }
   movingID = setTimeout("startMove()", 100);
  
  }  function stopMove()
  {
   clearTimeout(movingID);
  }
    function up()
{
  xy();
}
function onload()
{
  div1.style.left = 0;
      div1.style.top=0;
}
function mmove()
{  
 document.getElementById("lb1").innerText=event.clientX+","+event.clientY
}
  </script>  </head>
  <body onload="onload()" style="margin:0px;">
<div style="width:800px; height:500px; background-color:#FFFFCC" onmousedown="startMove()" onmouseup="up()" onmousemove="mmove()">
  <div id="div1" style="position:absolute; width: 24px; height:24px; background-color:#0033FF"></div>
  <label id="lb1">10,10</label>
</div>
</body>
  </html>

解决方案 »

  1.   


    斜线移动,无非是同时改变 top、left的值
      

  2.   

    这个怎么玩的,关于斜线移动的问题我最近也很困惑,不过本人有点心得希望一起研究下,楼上的朋友说的很好斜线移动无非是同时改变top和left的值,但实验中会发现,比如当top的值为1时候要得到left的值就可以根据公式1*k(k为斜率)但是斜率出了特殊情况外都不为整数而top和left是根据像素取值的只能取整数。所以我只做出了斜率为1的斜线动态移动。代码如下:
    function go_pp(){
      pp.style.top=parseInt(pp.style.top)+1;
    pp.style.left=parseInt(pp.style.left)+1]);}
    setInterval("go_pp()",1);
    这样刚好可以按45°角动态移动