问题标签 [game-loop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9586 浏览

android - 暂停线程 - HistoryRecord 的活动暂停超时

我正在尝试在 Android 中编写游戏引擎,但我对线程不太熟悉。

我的线程有一个属性 mSurfaceHolder,它保存了我将要绘制到的表面。我的线程的 run() 方法如下所示:

STATE_RUNNING表示 Activity 处于前台并且游戏应该正在运行时的状态。 STATE_PAUSED表示另一个活动进入前台时的状态。我不完全确定为什么在暂停时仍需要绘制,但这似乎是我从LunarLander 示例中收集到的。

我希望在我查看活动时,游戏会更新和绘制(我使用 LogCat 进行测试)。然后当我返回主屏幕或顶部出现另一个活动时,它只会绘制。

好吧,它确实在我观看活动时绘制和更新,因此游戏循环本身可以工作。但是当我离开活动时,它没有任何效果。这是从活动的 onPause() 调用的线程的 pause() 方法:

如您所见,为了测试此方法,我记录了一些消息。现在,当我离开活动时,我发现“这里”已记录,但“那里”没有。现在,由于我对线程的了解有限(我几乎不知道synchronized实际上是做什么的),我相信这会发生,因为我的线程无法与表面保持器同步。但我不知道为什么它不同步。离开活动几秒钟后,我在 LogCat 中看到以下警告:

Activity pause timeout for HistoryRecord

知道为什么会发生这种情况吗?如果我再次尝试启动 Activity 没有问题,线程会保持原样运行。

非常感谢。

编辑:刚刚发现了别的东西。如果我在启动活动后大约一秒钟内离开活动,线程就会暂停。然后它将在同一任务仍在运行时再次恢复并暂停,完全没有问题。我不知道为什么在短时间内它会起作用,但如果我离开它太久,它就不会了。

编辑2:好的......我修好了。但我不认为我应该做我做过的事。我基本上已经mSurfaceHolder从 pause() 和 setState() 方法(由 pause() 使用)中删除了任何同步。不,它按预期工作,但我认为同步是有原因的。

也许对我来说最好的问题是:何时应该使用同步块将线程与对象同步?而在这种情况下,与 SurfaceHolder 同步的目的是什么?

0 投票
2 回答
815 浏览

iphone - 如何在新旧 iPhone 上获得一致的速度?

我正在为 iPhone 使用 OpenGL ES 创建 2D 游戏。我正在使用 NSTimer 以 0.002 (60 fps) 的间隔调用我的游戏循环,并将重复设置为“NO”(我正在按照建议从函数内再次运行 NSTimer):

这在我的 3GS 上运行流畅,但是当我在 2G 上测试时,游戏运行速度要慢得多,有时我会偶尔出现空白帧。当我将间隔降低到 0.033 (30 fps) 时。3G太慢了。

我知道必须有某种方法可以在两种设备上获得一致的播放。Doodle Jump 似乎在两部手机上运行流畅且帧率相同。

0 投票
1 回答
164 浏览

iphone - iPhone 甲板游戏循环

谁能告诉运行像 Uno 或 Herats(甲板游戏)这样的游戏循环的最佳方法

0 投票
3 回答
847 浏览

iphone - iPhone 游戏循环混合

我有一个应用程序的想法,它需要我实现这些需要基本物理特性(如重力、加速度等)的小精灵……所以我很自然地研究了 iPhone 的游戏循环,这上面有很多线程,但我想了解的是,我希望能够创建这些精灵并让它们使用游戏循环自然地表现,但仍然具有完整的“标准”iPhone交互,即触摸、捏合、滑动、核心动画、核心数据等...

这是否就像在后台线程上实现游戏循环并在该线程上更新精灵然后在主 UI 线程上执行标准操作一样简单(当然除了明显的后台任务)?

如果可能的话,我想对这类事情进行一些总体概述。

0 投票
2 回答
5078 浏览

c++ - 多线程游戏服务器的基本设计?

多线程游戏服务器是怎么写的?

如果有 4 个线程,是否有 1 个线程运行游戏循环,3 个接受和处理请求?另外:信息是从运行游戏循环的线程发送的吗?

0 投票
1 回答
1735 浏览

animation - 限制帧速率时对象移动不连贯

我一直在游戏中物体的不稳定运动遇到一些麻烦。

如果帧速率没有上限,则游戏运行流畅。

如果我将帧速率限制为 60 fps,则运动是不稳定的。

物体的运动是这样的……

其中速度以每秒像素为单位,GetFrameTime() 返回自上一帧以来经过的时间。请注意,对象仅在 x 和 y 方向上移动。

我正在使用 SFML,具有函数SetFramerateLimit(60)UseVerticalSync(true). 在尝试解决不稳定的运动问题时,我阅读了 XNA 开发人员的一篇文章,内容是他们如何更新一次、渲染一次,然后如果游戏循环中剩余的时间 < 帧速率(即 1/60)那么他们在那段时间剩下的时间里我都会睡觉。我相信这就是 SFML 所做的,因为我禁用了这些功能并在该行为中写入,我得到了相同的症状。

现在我并不是说上述方法是一件坏事。事实上,我喜欢该应用程序没有做不必要的工作(在使用设置的帧限制和没有设置帧限制运行应用程序时,资源使用情况存在显着差异)。但是,我真的不知道为什么运动是波涛汹涌的。我已经阅读了 gafferongames 文章,但它们似乎不适用于这里。

任何帮助表示赞赏,谢谢。

编辑:我已经确定了问题,现在只是不知道如何解决它。

在对象“跳跃”的帧上,m_distance 明显大于其他帧中的距离。仔细观察,GetFrameTime() 也显着大于帧之间的先前时间(显着差异为 2-3 毫秒)。

Edit2:我相信我已经想出了一个解决方案,这要归功于http://gafferongames.com/game-physics/fix-your-timestep/。设置一个固定的增量时间,而不是使用 GetFrameTime。

0 投票
1 回答
937 浏览

c - 这是 FPS 独立游戏循环的良好实现吗?

我目前对基于物理的游戏的 FPS 独立游戏循环的以下实现接近。它在我测试过的几乎每台计算机上都运行良好,在帧速率下降时保持游戏速度一致。然而,我将移植到嵌入式设备,这可能会在视频方面更加困难,我想知道它是否仍然会减少芥末。

编辑:

对于这个问题,假设 msecs() 返回程序运行的毫秒数。不同平台上毫秒的实现是不同的。这个循环也在不同的平台上以不同的方式运行。

0 投票
2 回答
1524 浏览

java - android游戏中主游戏循环的位置

我正在尝试使用 OpenGL 为 android 上的游戏编写一些骨架。我想知道,我应该在哪里放置我的主游戏循环代码?

到目前为止,我最好的候选者是 Renderer.onDrawFrame(...) 方法,它似乎是按帧调用的,所以代码如下所示:

有没有更好的方法?我不喜欢这个,因为 1)我必须在 android 期望我渲染的地方混合更新和渲染,2)这个方法似乎是从一个单独的“渲染线程”调用的,这增加了游戏的复杂性。

0 投票
7 回答
1849 浏览

php - PHP:游戏循环(线程或排序)

我正在编写 PHP 代码作为游戏客户端。它使用套接字;socket_create 后跟 socket_connect,然后是 socket_read。它工作正常,但问题是服务器可以随时发送数据包,这意味着 socket_read 需要在“游戏循环”中不断发生。所以是这样的:

不起作用,因为它卡在循环中(服务器不会终止连接,直到客户端退出游戏)并且 PHP 代码需要在数据包进入时对其进行处理。

所以 PHP 并没有真正的线程。处理这个问题的最佳方法是什么?

0 投票
1 回答
425 浏览

iphone - 没有触摸被触发!

好的,我想我之前的问题并不详细。我提供更多细节。

在发布完整源代码之前,我必须问一下我的问题:我的问题是为什么以下程序不调用 touchesBegan、touchesMoved 和 touchesEnded?它曾经在以前的 iOS SDK 中工作。我当前的 xcode 版本是 3.2.5

一条评论:如果您在 iPad 模拟器上运行以下代码,则将调用所有内容。所以这很奇怪为什么 iPhone 模拟器和实际设备不响应​​这个问题。

主文件


AppDelegate.h


AppDelegate.mm


GLView.h


GLView.mm

这只是一个测试用例。我主要关心的是为什么使用新的 SDK,触摸不会被调用?请不要告诉我我必须使用 NSTimer 或其他计时器。我在安装新的 SDK 之前做了工作。我只是想知道是否有人可以在该源代码中看到除此之外的任何问题。

谢谢,孟菲斯