- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Flash 和 Actionscript 3 制作一个基本游戏。
到目前为止,我一直致力于打造流畅的游戏循环,但遇到了问题。我尝试实现一个固定的时间戳循环,看到:http://gafferongames.com/game-physics/fix-your-timestep/以及 Flixel。
我现在遇到的主要问题是,在屏幕上移动一个简单的对象会产生明显的卡顿。我的目标是获得更流畅的体验,但似乎无法弄清楚问题是什么。
主循环在 Event.ENTER_FRAME 上以 60 fps 的速度调用。
首先实例化这些变量:
public var total:uint = 0;
public var fixedDT:Number = 1000.0/60.0; //Shoot for 60 FPS in MS
public var accumulator:int = 0;
public var maxAccumulation:uint = 120;
这是每个 ENTER_FRAME 上的主循环:
//Most times are in ms
var mark:uint = getTimer();
var elapsedMS:uint = mark-total;
total = mark;
accumulator += elapsedMS;
if(accumulator > maxAccumulation){
accumulator = maxAccumulation;
}
while(accumulator > fixedDT){
step();
accumulator = accumulator - fixedDT;
}
//Convert from ms to secs. to interpolate graphics drawing (linear interpolation)
renderGameState(accumulator/fixedDT/1000.0);
step() 只是用固定的增量时间更新每个游戏对象。游戏对象更新函数很简单,如下:
//First part is just updating the previous position for graphic interpolation
position.x += velocity.x*deltaTime;
position.y += velocity.y*deltaTime;
对于渲染,我只是绘制 bitmap.copyPixel。我提到的图形插值是使用基本的线性插值函数,该函数使用 prev./curr.位置和 deltaTime 来计算绘制 X/Y。
public function render(bitmap:BitmapData, deltaTime:Number, xOff:Number, yOff:Number):void{
this.x = lerp(prevPosition.x,position.x,deltaTime) + xOff;
this.y = lerp(prevPosition.y,position.y,deltaTime) + yOff;
bitmap.copyPixels(bitmapData, bitmapData.rect,new Point(this.x,this.y),null,null,true);
}
public function lerp(v0:Number, v1:Number, t:Number):Number {
return (1-t)*v0 + t*v1;
}
但是,出现了明显的卡顿现象。在下图中,我在绘制位图之前没有清除位图。您应该能够看到渲染的圆圈间距之间存在很大差异,有时甚至非常明显。
如果有任何帮助,我将不胜感激,谢谢!
最佳答案
我不知道这是否有帮助,但这是我用来修复时间步长的代码。
private var _pause :Boolean;
private var _prevTimeMS :int;
private var _simulationTime :Number;
override public function update():void
{
super.update();
if (!_pause)
{
var curTimeMS:uint = getTimer();
if (curTimeMS == _prevTimeMS)
{
return;
}
var deltaTime:Number = (curTimeMS - _prevTimeMS) / 1000;
if (deltaTime > 0.05)
{
deltaTime = 0.05;
}
_prevTimeMS = curTimeMS;
_simulationTime += deltaTime;
while (space.elapsedTime < _simulationTime)
{
// Your game step goes here.
_space.step((stage.frameRate > 0) ? (1 / stage.frameRate) : (1 / 60));
}
}
}
(最初取自 Nape Physics 样本)
关于actionscript-3 - ActionScript 3/Flash : Basic Game Loop Stuttering Problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401922/
学习 SFML 并首次使用 C++ 制作游戏。我的问题来自角色的移动。我正在制作类似 Astroids 的克隆,按下按键时的运动不是很流畅。当同时按下旋转和前进时,角色会四处走动,并停止。有帮助吗?
我正在尝试编写一些多线程代码以从 DAQ 设备读取并同时呈现捕获的信号: std::atomic rendering (false); auto render = [&rendering, &dis
假设我们有一段代码可以将一系列相似的元素注入(inject)到 DOM 中。像这样: var COUNT = 10000, elements = Object.keys(Array(COUNT
我的一个应用程序通过读取数组列表将对象绘制到屏幕上: 简单代码摘要: @Override public synchronized void paintComponent(Graphics g) {
几年来我一直断断续续地致力于一款基于文本的冒险游戏。它最初是作为学习 Python 的一种方式开始的,在我熟悉了这门语言后,我转向了与我的职业生涯更相关的项目。我现在有点能干了(仍然是菜鸟,但你知道,
我厌倦了在我网站的每个页面上编辑一段内容,所以我把它放在一个单独的 HTML 文件中,并一直在我所有的页面上加载标记到它的位置页面: $("#header-house").
我们的一台运行 PHP 应用程序的生产机器上有一个特殊问题。 我们有一个仅在代码中的一个位置调用的 AJAX 调用。然而,在任何给定时间,当我查看 Linux 中的 PHP 事件文件 (suphp_l
我想创建一个延迟加载适配器以与 Gallery 小部件一起使用。 也就是说 getView() 立即返回一个 ImageView ,稍后一些其他机制将异步调用其 setImageBitmap() 方法
正如标题所说,我正在学习Python,我认为一个很好的方法就是使用链接列表。我正在尝试创建一个“口吃”函数,它基本上获取链接列表中的每个整数,并重复它,无论你告诉它重复多少次。 例如:如果我的链表是1
使用 NetStream 从 http 流式传输内容,我注意到带有某些导出的 h264 的 esp,如果播放器遇到空缓冲区,它将停止并缓冲到请求的长度(如预期的那样)。 然而,一旦缓冲区满了,播放就不
我们有一个问题,即在负载测试期间,如果我们在我们的一项服务上快速触发调用,我们会收到错误 “System.ServiceModel.ServerTooBusyException:创建可靠 sessio
我正在开发一款带有 sprite 套件的简单飞行游戏。一旦 spaceship 达到最大高度和速度,它就会以恒定速度继续飞行。我注意到 spaceship 在不断的飞行过程中会随机出现断断续续的情况。
当切换到加载数据的数据透视表项时,我在从一项切换到另一项时遇到卡顿现象。我已将数据加载分离到一个单独的线程中,这很有帮助,但我仍然遇到一些糟糕的性能....想知道你们是否有任何想法.... 这是枢轴项
我正在尝试使用 d3.js 的 d3.behavior.drag() drag事件来更新我的数据模型(不立即设置元素位置),然后运行我的“绘制”函数以根据更新的模型更新所有元素。此外,我正在使用翻译
嘿嘿, 所以我正在尝试用 libao 播放 pcm 音频。我的目标是让播放可以暂停和取消。 出于某种原因,alsa 驱动程序的输出断断续续,播放速度非常非常快。就像您正在擦洗输出一样。如果我只是播放整
我正在用 C++ 同时开发一个引擎和一个游戏,我使用 box2D 作为物理后端。我正在不同的 Android 设备上进行测试,并且在 3 台设备中的 2 台上进行测试,游戏运行良好,物理效果也是如此。
我在我的网站上工作,我想添加一个动画标题,像波浪一样移动。我已经想出了如何让无限的卷轴滚动起来,但当我的两张图片在顶部移动时,它们之间有一条小的抖动的白线,不能通过调整页边距来修复(在我的实际网站上,
我目前正在阅读 Gary W Flake 写的 super 好书《自然的计算之美》,他在书中介绍了 Stutter language 。我正在尝试在 MacOSX 10.12.6 (Sierra) 上
我目前已经完成了一个可以播放 Youtube 视频的网络应用程序。当我的应用程序(使用 jQuery UI)接受表单输入或实现元素操作(用户或动态触发)。然而,当 Youtube 向我的应用程序强制输
我已经尝试到处寻找这个问题的解决方案,但没有成功;尽管我已经尝试了各种建议,但我将在下面详细说明这些建议。 我创建了一个非常小且简单的示例项目来测试渲染 Tiled map 并设置带有视口(viewp
我是一名优秀的程序员,十分优秀!