平均速度,as3

时间:2010-06-02 17:06:19

标签: flash actionscript-3

我需要一些准确的东西我可以插入方程式,如果你能提供帮助的话。你会如何应用下面的等式? 谢谢你们。

平均速度和位移
平均速度
V = X / T

位移
X = V * T

more info


示例

我有30秒,一个170码的场地。我需要用什么平均速度让我的马在30秒内到达场地的尽头。我移动了小数位并得到了这个。

alt text http://www.ashcraftband.com/myspace/videodnd/VQ.jpg

这是我尝试的'返回值接近,但不够接近' FLA here

var TIMER:int = 10;
var T:int = 0;
var V:int = 5.6;
var X:int = 0;
var Xf:int = 17000/10*2;
var timer:Timer = new Timer(TIMER,Xf);  
timer.addEventListener(TimerEvent.TIMER, incrementCounter); 
timer.start();  
function formatCount(i:int):String {
var fraction:int = Math.abs(i % 100);
var whole:int = Math.abs(i / 100); 
return ("0000000" + whole).substr(-7, 7) + "." + (fraction < 10 ? "0" + fraction : fraction);
}
function incrementCounter(event:TimerEvent) { 
T++; 
X = Math.abs(V*T);
text.text = formatCount(X);
}

测试

TARGET
5.6码* 30秒= 168码

INTEGERS
135.00在30秒内

MATH.ROUND
135.00在30秒内

NUMBERS
140.00在30秒内

控制计时器'我用这个和桌面上的时钟进行了测试'

var timetest:Timer = new Timer(1000,30);
var Dplus:int = 17000;
timetest.addEventListener(TimerEvent.TIMER, cow);
timetest.start();
function cow(evt:TimerEvent):void {
tx.text = String("30 SECONDS: " + timetest.currentCount);
if(timetest.currentCount> Dplus){
timetest.stop();
}
}

//far as I got...couldn't get delta to work...
T = (V*timer.currentCount);
X += Math.round(T);

1 个答案:

答案 0 :(得分:1)

我认为你的问题是你认为通过时间=延迟*计数。事实并非如此。现代操作系统上的定时器不精确,这是因为许多线程同意CPU和时间以固定间隔进行,如果定时器间隔很小,这尤其明显。

那怎么样?您应该采用在两个计时器滴答之间发生的实际时间跨度,这将为您提供时间增量。然后是x += v*deltaT

示例:

function incrementCounter(event:TimerEvent) { 
   var now:int = new Date().getTime(); 
   X += Math.abs(V*(now - T));
   text.text = formatCount(X);
   T = now;
}