首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动作脚本3.如何防止闪存游戏中的滞后错误问题?

动作脚本3.如何防止闪存游戏中的滞后错误问题?
EN

Stack Overflow用户
提问于 2015-03-18 19:05:54
回答 2查看 381关注 0票数 0

如何防止闪存游戏中的滞后性问题?例如,如果游戏有倒计时1分钟,玩家必须抓住尽可能多的项目。

以下是以下滞后bug问题:

  • 如果物品移动(没有静态位置)
  • 计时器启动计数缓慢时,玩家有滞后(CPU使用率90%-100%)。

例如,如果没有延迟的玩家可以得到100分,电脑慢/坏的玩家可以多得到4-6倍,比如400-600。

我认为这是因为它在客户端,但是如何将它移到服务器端呢?我应该在数据库中插入(并更新)倒计时时间吗?但是如何在每毫秒上更新呢?

那么项目定位解决方案呢?如果玩家有很大的滞后,项目移动非常慢,所以很容易点击,你有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-03-18 19:17:12

将功能转移到服务器端并不能解决问题。现在,如果有许多玩家连接到服务器上,那么服务器就会滞后,并给这些玩家更多的时间做出反应。

要使您的逻辑独立于滞后,请不要将其建立在屏幕更新的基础上。因为这假设屏幕更新(或帧)之间的时间是恒定的。

相反,根据帧之间的实际时间来制定逻辑。使用getTimer来度量当前帧到最后一个帧之间传递的时间。US/FlashPlatform/reference/actionscript/3/flash/utils/package.html

当然,您的逻辑应该包括帧之间发生的情况的计算。

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 21:45:01

为了主要解决客户端的速度问题,您需要根据实际时间(而不是帧)编写所有与速度相关的代码。例如:

下面是一个非常典型的示例代码,用于根据框架移动对象:

代码语言:javascript
复制
// speed = pixels per frame
var xSpeed:Number = 5;
var ySpeed:Number = 5;

addEventListener(Event.ENTER_FRAME, update);

function update(e:Event):void {
    player.x += xSpeed;
    player.y += ySpeed;
}

虽然对于单个客户端来说,这段代码很简单并且足够好,但它非常依赖于帧速率,而且正如您所知,帧速率非常“弹性”,实际帧速率受客户端CPU速度的影响很大。

相反,下面是一个基于实际运行时间的移动示例:

代码语言:javascript
复制
// speed = pixels per second
var xSpeed:Number = 5 * stage.frameRate;
var ySpeed:Number = 5 * stage.frameRate;

var lastTime:int = getTimer();

addEventListener(Event.ENTER_FRAME, update);

function update(e:Event):void {
    var currentTime:int = getTimer();
    var elapsedSeconds:Number = (currentTime - lastTime) / 1000;
    player.x += xSpeed * elapsedSeconds;
    player.y += ySpeed * elapsedSeconds;

    lastTime = currentTime;
}

这里的关键部分是使用getTimer()跟踪当前时间,并且每个更新都根据实际运行的时间(而不是固定的数量)移动player。我将xSpeedySpeed设置为5 * stage.frameRate,以说明它如何与另一个示例相匹配,但您不必这样做。最终结果是,无论实际帧速率如何,第二个示例的移动速度都是一致的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29130637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档