这些精灵由一个容器DIV组成,firstChild是一个绝对定位的IMG。该图像由对象的16个垂直视图/角度组成。当对象从A移动到B时,ATAN2函数会计算适合对象移动方向的style=top:值。这一切工作,除了精灵的另一个方面-他们可以改变他们的大小。精灵的默认大小是24px (宽),这适用于ATAN2,但一旦精灵变大,计算就会使精灵的框架条不对齐。下面是代码,x1 - y1是from和to位置,而s是大小(宽度)。值128是最大大小,加括号的值是允许的子画面,最后一次计算假定了这一点,然后用*(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);
}发布于 2011-05-13 20:20:54
在第一行中,您执行浮点计算,并将结果传递给需要字符串参数的函数……你可以通过隐式转换来保存,但它很难看。
第二行中的巨大条件将角度舍入到最接近的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的精确倍数。
https://stackoverflow.com/questions/5990104
复制相似问题