我们在actionscript 3中开发了一个闪存游戏,它在我们的远程服务器上运行得慢得多。
游戏规格:
100x100
。
奇怪的是,我们发布swf文件并在本地运行,一切都很快。我们将swf复制到远程服务器上,一切运行都要慢得多。音乐以正常的速度播放,而电影则以大约一半的速度在屏幕上移动。
为什么从远程服务器获取文件时会以不同的方式运行?swf不是总是在本地运行吗?此外,在任务管理器运行时,我们在本地和远程运行它,并且它似乎消耗不了太多的CPU或内存。
编辑:好吧,这真的很奇怪。我在游戏中添加了一个更框架的文本框。它报告自上次计时器滴答以来的ms数。它一直报告50毫秒。我的计时器明显设置为25。这解释了一半的速度,但这是什么原因呢?我还在timer.Interval属性上添加了一个检查,看看它是否已经改变了,但没有改变;在游戏运行期间,它仍然设置为25。
我找到了这篇文章:http://www.bit-101.com/blog/?p=910,并将我的代码转换为使用ENTER_FRAME而不是计时器,它可以工作。我得到完整的40 few,给予或接受几%。但是,仍然不确定计时器出了什么问题;如果计时器被我的循环时间延迟了,它会波动,但不会。不管发生了多少,每次都是50毫秒。
下面是我使用的代码(或多或少):
t = new Timer(25);
t.addEventListener(TimerEvent.TIMER, timerTick);
t.start();在计时器滴答码中,我使用getTimer()来计时滴答之间的时间。每次都能达到50毫秒。
发布于 2011-10-22 13:28:00
我以前在Timer类上遇到了一些问题,使用它来运行我的游戏循环。你的主权财富基金是什么?我发现其中两人是有联系的。
以前,我认为我可以使用SWF 2,同时设置定时器给我30 FPS。所发生的是,主权财富基金将框架滴答,它将检查计时器类。计时器可能会触发事件。然后,半秒后( SWF被设置为2 2FPS),SWF将再次勾选。Timer类然后尝试触发15个事件(Timer被设置为30 was )。同时,它可以同时触发的事件数量似乎也有限制,因为它一次只会发射其中的5个。
切换到ENTER_FRAME -它也允许您节流您的帧速率,如果您需要。
此外,如果您还没有使用它,学习使用增量时间来控制您的游戏对象的移动。
private var m_lastTime:int = 0;
private function _onEnterFrame( e:Event ):void
{
var currTime:int = getTimer();
var deltaTime:Number = ( currTime - this.m_lastTime ) * 0.001;
this.m_lastTime = currTime;
// then, if you want your object to move at 10 pixels per second, it's:
myObj.x += 10 * deltaTime;
}然后,无论你的计算机的速度,你的对象将以恒定的速度移动。
如果你正在做一个物理游戏,那么你也需要考虑修正你的时间步骤,以获得更一致的结果:http://gafferongames.com/game-physics/fix-your-timestep/
奖金链接:http://www.8bitrocket.com/2008/04/08/tutorial-creating-an-optimized-as3-game-timer-loop/
发布于 2011-10-17 13:20:39
SWF总是在本地由播放器执行。我想到的可能不同之处是:
在本地使用桌面Flash,而不是plugin/activeX
窗口
https://stackoverflow.com/questions/7794183
复制相似问题