6

我已经开发 Web 应用程序有一段时间了,并且已经涉足 GUI 和游戏应用程序开发。

在 Web 应用程序(对我来说是 php)中,向文件发出请求,该文件包含将信息处理到内存中的所有必要文件,然后每个请求的流程从上到下。(主要)

我知道对于游戏来说,动作发生在游戏循环中,但是游戏的所有不同元素是如何分层到单个循环中的(菜单系统、gui、加载资产和 3d 世界)并不断加载和卸载某些事物。

GUI程序也是如此,我相信存在某种“应用程序循环”。

大多数项目是否被调用到内存中然后被访问,这些项目是否在需要时链接并加载到内存中?

帮助我更快地开发 Web 应用程序的是当我了解程序的流程时,它不必详细,只需大致的想法或伪代码。

4

3 回答 3

14

所有这些几乎总是有一个循环——但这不是你在大部分开发过程中倾向于考虑的事情。

如果您退后一步,您的 Web 应用程序是基于一个循环 - Web 服务器的accept()循环:

while(listening) {
     get a socket connection;
     handle it;
}

.. 但作为一名 Web 开发人员,您可以避免这种情况,并编写“事件驱动”代码——“当有人请求此 URL 时,执行此操作”。

GUI 也是事件驱动的,并且事件也被某处的循环检测到:

while(running) {
    get mouse/keyboard/whatever event
    handle it
}

但是 GUI 开发人员不需要过多考虑循环。他们写道“当鼠标点击此处时,执行此操作”。

游戏,同样如此。有人必须写一个循环:

while(game is in progress) {
    invoke every game object's 'move one frame' method;
    poll for an input event;
}

...而其他代码则以事件驱动的方式编写:“当子弹对象与该对象重合时,触发爆炸事件”。

于 2008-12-18T21:07:04.323 回答
1

对于应用程序和较小程度的游戏,该软件是事件驱动的。用户使用键盘或鼠标做“某事”,该事件被发送到软件的其余部分。

在游戏中,游戏循环很重要,因为它专注于处理屏幕和游戏状态。许多游戏需要实时性能。借助现代 3D 图形 API,大部分屏幕处理都可以转储到 GPU 上。然而,游戏状态由主循环跟踪。团队为游戏所做的大部分努力都集中在使循环的处理非常流畅。

对于应用程序,通常会在线程上产生繁重的处理。这是一个复杂的主题,因为围绕试图访问相同数据的两件事的问题。关于这个主题有整本书。

对于应用程序,顺序是

  1. 用户执行 X、X 和相关信息(如 X、Y 坐标)被发送到 UI_Controller。
  2. UI 决定执行哪个命令。
  3. 命令被执行。
  4. 模型/数据被修改。
  5. 该命令告诉 UI_Controller 更新 UI 的各个区域。
  6. UI_Controller 重绘 UI。
  7. 命令返回。
  8. 应用程序等待下一个事件。

这有几种变体。该模型可以允许侦听器等待数据的变化。当数据监听器执行并重绘 UI 时。

于 2008-12-18T21:05:42.753 回答
1

就游戏编程而言,我只是一个业余爱好者,但这是我通常做的:

我有一个对象,它代表了游戏中“场景”的一个非常通用的概念。游戏的所有不同主要部分都源自此 Scene 对象。一个场景实际上可以是任何东西,这取决于它是什么类型的游戏。无论如何,从场景派生的每个更具体的场景都有一个为该场景加载所有必要元素的过程。

当游戏要改变场景时,指向活动场景的指针被设置为一个新场景,然后它将加载所有需要的对象。

通用场景对象具有虚拟函数,例如加载、绘制和逻辑,它们在游戏循环中的特定时间从活动场景指针调用。每个特定场景都有自己实现这些方法的方式。

I don't know if that's how it's supposed to be done or not, but it was a very easy way for me to control the flow of things. The scene concept also made it easy to store multiple scenes as collections. With multiple scene pointers stored in a stack of sorts at one time, scenes could be stored in reserve and maintain their full state when returned to, or even do things like dim but to continue to draw while the active scene drew over them as an overlay of sorts.

So anyway, if you do it like that it's not precisely like a web page but I guess if you think about it the right way it's similar enough.

于 2008-12-18T21:13:58.210 回答