2011-02-13 35 views
0

我正在使用这个函数来移动一个物体围绕一个完美圆的中心点,并且试图修改它以将它移动到它的1/2的椭圆形状很宽?ActionScript 3 Trig方程创建椭圆

基本上,我有一组速度

var myVelocity:Number = 0.25; 

然后计算我基于正弦和余弦的速度

var myCos:Number = Math.cos(myVelocity); 
var mySin:Number = Math.sin(myVelocity); 

然后我图从固定的中心点的物体的距离沿每个轴和

var x1:Number = myBall.x - centerX; 
var y1:Number = myBall.y - centerY; 
var x2:Number = myCos * x1 - mySin * y1; 
var y2:Number = myCos * y1 + mySin * x1; 
myBall.x = centerX + x2; 
myBall.y = centerY + y2; 

我有另一个函数,数字x和y基于myBall.x = centerX + cos(angle)* radius;这很容易将半径修改为椭圆,但有没有简单的方法来修改上面的椭圆变成椭圆?我想这样做是与代码效率更高,减少数学函数的调用次数

+0

它应该是`VAR mySin:数= Math.sin(myVelocity);` – weltraumpirat 2011-02-13 21:40:38

+0

@weltraumpirat:编辑 – OXMO456 2011-02-13 23:07:15

回答

1

这个问题几乎是逐字什么Keith Peters覆盖Foundation Actionscript 3.0: Making Things Move!

我从刮起了快速的片断为你这本书。

import flash.display.Shape; 
import flash.events.Event; 

var box:Shape = new Shape(); 
box.graphics.beginFill(0xFF0000); 
box.graphics.drawRect(0, 0, 50, 50); 
box.graphics.endFill(); 
addChild(box); 
var angle:Number = 0; 
var centerX:Number = stage.stageWidth/2 - (box.width/2); 
var centerY:Number = stage.stageHeight/2 - (box.height/2) 
var radiusX:Number = 200; 
var radiusY:Number = 100; 
var speed:Number = .1; 
stage.addEventListener(Event.ENTER_FRAME, loop, false, 0, true); 

function loop(evt:Event):void 
{ 
    box.x = centerX + Math.sin(angle) * radiusX; 
    box.y = centerY + Math.cos(angle) * radiusY; 
    angle += speed; 
} 

结果:http://www.swfupload.com/view/155573.htm