![](https://i-blog.csdnimg.cn/blog_migrate/6c1670fe53e2bdd952b6a3a53ab7a3fb.jpeg)
90度视图下的移动,上到下,左到右都是相同的时间。
![](https://i-blog.csdnimg.cn/blog_migrate/f885623b6360b959614c21ed2b207100.jpeg)
45度视图下的移动时,宽已成高的两倍了。所需时间是不会变的.
所以。得出结论:以上下90度时移动速度比横向0度移动时,慢1倍。
这里看作 横向是 s1 那么上下90度时就是s1/2的速度 当以四个象限之间45度角移动时。
就是s1/1.5的速度。但是这个并不准。
当以四个象限之间45度角移动时。就是s1/1.5的速度。
![](https://i-blog.csdnimg.cn/blog_migrate/bf073352022b41bc55329bca02fe7907.jpeg)
正视角时。这个方向是45度方向
![](https://i-blog.csdnimg.cn/blog_migrate/dde5aaaafa3b77888f298fffe622daec.jpeg)
斜角45度时。这个方向是45度。 所以。正常的45度。放在斜角里。并不是45度。
但是这里我们可以用角尺量出 这个角度的。因为我们游戏最多是8方向。所以把8个方向的角度固定死。比配8个固定的速度就可以了。
/** * 跟据两点坐标计算出单位正确方向 * @param _px 原点X坐标 * @param _py 原点Y坐标 * @param _tox 目标点X坐标 * @param _toy 目标点Y坐标 * @param diremax 最大方向数 * (45度坐标系中,小夹角夹度是26.5度,大夹角角度是63.5度) */ public static function getDirectionForPoint(_px:int,_py:int,_tox:int,_toy:int,diremax:int):int { var ro:Number = 180+Math.atan2(_px-_tox,_py-_toy)*180/Math.PI; switch(diremax) { case 1://2方向(镜像) case 2://2方向 if(_tox>=_px) return 0; else return 1; break; case 3://4方向(镜像) case 4://4方向 if(ro>=315||ro<45) return 0; else if(ro<135) return 1; else if(ro<225) return 2; else return 3; break; case 5://8方向(镜像) case 8://8方向 if(ro>=328.25||ro<31.75) return 0; else if(ro<76.75) return 1; else if(ro<103.25) return 2; else if(ro<148.25) return 3; else if(ro<211.75) return 4; else if(ro<256.75) return 5; else if(ro<283.25) return 6; else return 7; break; } return 0; } /**通过计算方向和角度来获得移动速率减成 得到的数是跟据角色获得的移动时间加成 并用移动时间量减去它的结果**/ public static function getMoveTime(_x1:int,_y1:int,_x2:int,_y2:int,par:int):Number { var ran:int=Math.abs((Math.atan2(_y2-_y1,_x2-_x1)*180/Math.PI)); if(ran>90) ran = (180-ran); var nb:Number = par - ran/90*0.25*par; return nb; }