FLASH中的angle和_rotation

      Flash 2005-5-28 15:39:00
曾有位朋友发给我一个源文件,让看看哪里出了毛病。。。

他的原意是用方向键控制一球上下左右移动,在每一球上加以下代码:

onClipEvent (enterFrame) {

if(Key.isDown(Key.RIGHT)){

_x+=5; }

if(Key.isDown(Key.LEFT)){

_x-=5;

}

if(Key.isDown(Key.UP)){

_y-=5;

}

if(Key.isDown(Key.DOWN)){

_y+=5;

}

}

并想让一指针始终指向该球,主时间轴第一帧加入以下代码:

xx = bb._x - aa._x;

yy = bb._y - aa._y;

bbb = Math.atan2(yy,xx) * 180 /Math.PI aa._rotation+=(bbb-aa._rotation)/10

并将主时间轴延长至2帧。。

但测试的时候是不行的。。。

我将代码稍微改了一下:

xx = bb._x - aa._x;

yy = bb._y - aa._y;

bbb = Math.atan2(yy,xx) * 180 /Math.PI+90 aa._rotation=bbb

测试正常。。。

但他还需要一个由快到慢的转动效果。。。

于是我又将代码做了修改:

xx = bb._x - aa._x;

yy = bb._y - aa._y;

bbb = Math.atan2(yy,xx) * 180 /Math.PI+90 aa._rotation+=(bbb-aa._rotation)/10

测试时,在一二三象限(以指针为坐标轴原点)正常,但到了第四象限,指针乱转。。。

什么原因呢???

我用trace(bbb)和trace(aa._rotation)进行了测试发现二者在一二三象限都是相等的,但在第三象限就不相等了。。。

即使用aa._rotation=bbb来强制二者相等,trace(bbb)和trace(aa._rotation)的结果也不一样。。。

二者在第四象限的时候差360。。。

于是我又做了以下修改:

xx = bb._x - aa._x;

yy = bb._y - aa._y;

bbb = Math.atan2(yy,xx) * 180 /Math.PI+90

if(bbb>=180&&bbb<=270){

m=(aa._rotation+360)

if(m>=360){

m=m-360

}

aa._rotation+=(bbb-m)/10

}else{

aa._rotation+=(bbb-aa._rotation)/10

}

哈。。。

这一次测试成功。。。
标签集:TAGS:
回复Comments() 点击Count()
喜欢就顶一下

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
深度XP 雨林木风XP WinXP下载 世界之窗 深度系统 雨林木风 Ghost ghost系统盘 XP下载