2005/05/28 | FLASH中的angle和_rotation
类别(Flash) | 评论(1) | 阅读(1375) | 发表于 15:39
曾有位朋友发给我一个源文件,让看看哪里出了毛病。。。

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

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

}

哈。。。

这一次测试成功。。。
0

评论Comments

日志分类
首页[186]
Flash[84]
FMS[41]
AIR[2]
ASP[11]
作品区[12]
其他[36]