flash as3.0实用公式

2019-10-08 13:08:53于丽
< top) { sprite.y = bottom + sprite.height / 2; } 摩擦力应用(正确方法) : speed = Math.sqrt(vx * vx + vy * vy); angle = Math.atan2(vy, vx); if(speed > friction) { speed -= friction; } else { speed = 0; } vx = Math.cos(angle) * speed; vy = Math.sin(angle) * speed; 摩擦力应用(简便方法) vx *= friction; vy *= friction; 简单缓动运动,长形: var dx:Number = targetX - sprite.x; var dy:Number = targetY - sprite.y; vx = dx * easing; vy = dy * easing; sprite.x += vx; sprite.y += vy; 简单缓动运动,中形: vx = (targetX - sprite.x) * easing; vy = (targetY - sprite.y) * easing; sprite.x += vx; sprite.y += vy; 简单缓动运动,短形: sprite.x += (targetX - sprite.x) * easing; sprite.y += (targetY - sprite.y) * easing; 简单弹性运动,长形: var ax:Number = (targetX - sprite.x) * spring; var ay:Number = (targetY - sprite.y) * spring; vx += ax; vy += ay; vx *= friction; vy *= friction; sprite.x += vx; sprite.y += vy; 简单弹性运动,中形: vx += (targetX - sprite.x) * spring; vy += (targetY - sprite.y) * spring; vx *= friction; vy *= friction; sprite.x += vx; sprite.y += vy; 简单弹性运动,短形: vx += (targetX - sprite.x) * spring; vy += (targetY - sprite.y) * spring; sprite.x += (vx *= friction); sprite.y += (vy *= friction); 偏移弹性运动: var dx:Number = sprite.x - fixedX; var dy:Number = sprite.y - fixedY; var angle:Number = Math.atan2(dy, dx); var targetX:Number = fixedX + Math.cos(angle) * springLength; var targetY:Number = fixedX + Math.sin(angle) * springLength; // 如前例弹性运动到 targetX, targetY 距离碰撞检测: // 从影片 spriteA 和 spriteB 开始 // 如果使用一个空白影片,或影片没有半径(radius)属性 // 可以用宽度或高度除以 2。 var dx:Number = spriteB.x - spriteA.x; var dy:Number = spriteB.y - spriteA.y; var dist:Number = Math.sqrt(dx * dx + dy * dy); if(dist < spriteA.radius + spriteB.radius) { // 处理碰撞 } 多物体碰撞检测: var numObjects:uint = 10; for(var i:uint = 0; i < numObjects - 1; i++) { // 使用变量 i 提取引用 var objectA = objects[i]; for(var j:uint = i+1; j { // // 使用变量 j 提取引用 var objectB = objects[j]; // perform collision detection // between objectA and objectB } } 坐标旋转: x1 = Math.cos(angle) * x - Math.sin(angle) * y; y1 = Math.cos(angle) * y + Math.sin(angle) * x; 反坐标旋转: x1 = Math.cos(angle) * x + Math.sin(angle) * ;y y1 = Math.cos(angle) * y - Math.sin(angle) * x; 动量守恒的数学表达式: (m0 – m1) * v0 + 2 * m1 * v1 v0Final = ---------------------------------------------- m0 + m1 (m1 – m0) * v1 + 2 * m0 * v0 v1Final = --------------------------------------------- m0 + m1 动量守恒的 ActionScript 表达式,短形: var vxTotal:Number = vx0 - vx1; vx0 = ((ball0.mass - ball1.mass) * vx0 + 2 * ball1.mass * vx1) / (ball0.mass + ball1.mass); vx1 = vxTotal + vx0; 引力的一般公式: force = G * m1 * m2 / distance2 ActionScript 实现万有引力: function gravitate(partA:Ball, partB:Ball):void { var dx:Number = partB.x - partA.x; var dy:Number = partB.y - partA.y; var distSQ:Number = dx * dx + dy * dy; var dist:Number = Math.sqrt(distSQ); var force:Number = partA.mass * partB.mass / distSQ; var ax:Number = force * dx / dist; var ay:Number = force * dy / dist; partA.vx += ax / partA.mass; partA.vy += ay / partA.mass; partB.vx -= ax / partB.mass; partB.vy -= ay / partB.mass; } 余弦定理 a2 = b2 + c2 - 2 * b * c * cos A b2 = a2 + c2 - 2 * a * c * cos B c2 = a2 + b2 - 2 * a * b * cos C ActionScript 的余弦定理: A = Math.acos((b * b + c * c - a * a) / (2 * b * c)); B = Math.acos((a * a + c * c - b * b) / (2 * a * c)); C = Math.acos((a * a + b * b - c * c) / (2 * a * b)); 基本透视法: scale = fl / (fl + zpos); sprite.scaleX = sprite.scaleY = scale; sprite.alpha = scale; // 可选 sprite.x = vanishingPointX + xpos * scale; sprite.y = vanishingPointY + ypos * scale; Z 排序: // 假设有一个带有 zpos 属性的 3D 物体的数组 objectArray.sortOn("zpos", Array.DESCENDING | Array.NUMERIC); for(var i:uint = 0; i