我动画精灵w javacript - 这些精灵由一个容器DIV组成,firstChild是一个绝对定位的IMG。图像由物体的16个垂直视图/角度组成。当对象从A移动到B时,ATAN2函数计算出适合于对象行进方向的style = top:值。除了精灵的另一个方面外,它们都有效 - 它们可以改变它们的大小。精灵的默认大小是24px(宽),这适用于ATAN2,但是一旦精灵变大,计算就会错位精灵的帧条。下面是代码,x1 - y1是from和to位置,而s是大小(width)。值128是最大大小 - 并且bracked值是允许的sprite,最后一次计算假设这个,然后用*(s / 128)计算实际大小...
function P_angle(x1,x2,y1,y2,s)
{
var v=parseInt(Math.atan2(x2-x1,y2-y1)/(Math.PI/180)+180)
return (v>348.75?0:v>326.25?-128:v>303.75?-256:v>281.25?-384:v>258.75?-512:v>236.25?-640:v>213.75?-768:v>191.25?-896:v>168.75?-1024:v>146.25?-1152:v>123.75?-1280:v>101.25?-1408:v>78.75?-1536:v>56.25?-1664:v>33.75?-1792:v>11.25?-1920:0)*(s/128);
}
答案 0 :(得分:1)
在第一行中,您执行浮点计算并将结果传递给期望字符串参数的函数...您通过隐式转换保存,但它很难看。
第二行中的巨大条件将角度向最接近22.5度的倍数进行四舍五入,并将其映射到128的负倍数,然后将其乘以s
除以128 ......原来是专为128像素精灵设计?无论如何,你应该能够做到这一点:
function P_angle(x1,x2,y1,y2,s)
{
return s*(Math.round(Math.atan2(x2-x1,y2-y1)*(8/Math.PI)-8)%16);
}
你没有说原始代码的错位有多大,但是我怀疑它是由于在分割出128因子时出现的舍入误差造成的,而且你很幸运的是所有内容都是24像素精灵。使用此处的版本,您肯定会返回s
的确切倍数。