数学、物理算法ActionScript实现(1)
1.计算基本的三角函数
正弦=对边/斜边 Math.sin(弧度值):Number
余弦=邻边/斜边 Math.cos(弧度值):Number
正切=对边/邻边 Math.tan(弧度值):Number
余切=邻边/对边 1/Math.tan(弧度值):Number
2.转换弧度为度和转换度为弧度
radians = degrees * Math.PI / 180;
degrees = radians * 180 / Math.PI;
3.旋转鼠标位置
dx = mouseX - sprite.x;
dy = mouseY - sprite.y;
sprite.rotation = Math.atan2(dy,dx) * 180 / Math.PI;
4.创建波
public function Active(e:Event)
{
value = center + Math.sin(angle) * range;
angle += speed;
}
5.创建圆
public function Active(e:Event)
{
xpos = centerX + Math.cos(angle) * radius;
ypos = centerY + Math.sin(angle) * radius;
angle += speed;
}
6.创建椭圆
if(sprite.x - sprite.width/2 > right)
{
sprite.x = left - sprite.width/2;
}
else if(sprite.x + sprite.width/2 < left)
{
sprite.x = right + sprite.width/2;
}
public function Active(e:Event)
{
xpos += centerX + Math.cos(angle) * radiusA;
ypos += centerY + Math.sin(angle) * radiusB;
angle += speed;
}
7.获得两点之间的距离
dx = x2 - x1;
dy = y2 - y1;
distance = Math.sqrt(dx*dx + dy*dy);
8.相互转换16进制和10进制
trace(hexValue);
trace(decimalValue.toString(16));
9.组合组成色
color24 = red<<16 | green<<8 | blue;
color32 = alpha<<24 | red<<16 | green<<8 | blue;
10.提取组成色
red = color24 >>16;
green = color24 >>8 & 0xFF;
blue = color24 & 0xFF;
alpha = color32 >>24;
red = color32 >>16 & 0xFF;
green = color32 >>8 & 0xFF;
blue = color32 & 0xFF;
11.通过一点绘制曲线
//xt,yt是要穿过的点 x0,y0和x2,y2是曲线的端点
x1 = xt * 2 -(x0 + x2) /2;
y1 = yt * 2 -(y0 + y2) /2;
moveTo(x0,y0);
curveTo(x1,y1,x2,y2);
12.转换角速度为x,y速度
vx = speed * Math.cos(angle);
vy = speed * Math.sin(angle);
13.转换角加速度为x,y的加速度
ax = force * Math.cos(angle);
ay = force * Math.sin(angle);
14.将加速度加到速度上,将速度加大位移上
vx += ax;
vy += ay;
sprite.x += vx;
sprite.y += vy;
15.移除超过边界的物体
if(sprite.x-sprite.width/2 > right || sprite.x+sprite.width/2 < left || sprite.y-sprite.height/2 > bottom || sprite.y+sprite.height/2 <top)
{
removeChild(sprite);
}
16.重新生成超出边界的物体
if(sprite.x-sprite.width/2 > right || sprite.x+sprite.width/2 < left || sprite.y-sprite.height/2 > bottom || sprite.y+sprite.height/2 <top)
{
//重置精灵的位置和速度;
}
17.屏幕反弹折回
if(sprite.x - sprite.width/2 > right)
{
sprite.x = left - sprite.width/2;
}
else if(sprite.x + sprite.width/2 < left)
{
sprite.x = right + sprite.width/2;
}
if(sprite.y - sprite.height/2 > bottom)
{
sprite.y = top - sprite.height/2;
}
else if(sprite.y + sprite.width/2 < top)
{
sprite.y = bottom + sprite.height/2;
}
18.应用摩擦力
A:正确方法
speed = Math.sqrt(vx*vx +vy*vy);
angle = Math.atan2(dy,dx);
if(speed > friction)
{
speed -= firction;
}
else
{
speed = 0;
}
vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;
B:容易方法
- vx *= friction;
vy *= friction;