2008-12-18 68 views
6

我一直在开发Web应用程序一段时间,并已将我的脚趾浸入GUI和游戏应用程序开发中。与Web程序相比,GUI和游戏程序流程如何

在Web应用程序(php for me)中,向文件发出一个请求,该文件包含将信息处理到内存中的所有必需文件,然后对于每个请求,流从顶部到底部。 (主要)

我知道游戏中的动作发生在游戏循环中,但游戏的所有不同元素如何与单一循环(菜单系统,GUI,资产加载和3D世界)不断地加载和卸载某些东西。

同样的GUI程序,我相信有一些“应用程序循环”。

被调用到内存然后被访问的大部分项是否是在需要时链接并加载到内存中的项目?

什么帮助我更快地开发Web应用程序是当我理解程序的流程时,它不必被详细说明,只是一般的想法或伪代码。

回答

14

在所有这些方面几乎总是存在一个循环 - 但在大多数开发过程中,这并不是您想要考虑的。

如果你退一步,你的web应用程序都基于一个循环 - 在Web服务器的accept()循环:

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

..但作为一个Web开发者,你从屏蔽,并写'事件驱动'的代码 - '当有人请求这个URL时,这样做'。

图形用户界面也是事件驱动,并通过一个循环,所以也被检测的事件:

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; 
} 

...:“当子弹的对象与对象重合,引发爆炸事件”。

+0

对web开发中循环的相似之处的赞誉。 – 2008-12-18 21:13:14

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时的数据。

1

至于游戏编程去我只是一个业余爱好者,但是这是我平时做的:

我有一个表示在游戏中的“场景”的一种非常通用的概念的对象。游戏中所有不同的主要部分都是从这个Scene对象派生而来的。一个场景可能真的是任何东西,这取决于它是什么类型的游戏。无论如何,从场景派生的每个更具体的场景都有一个过程来加载该场景的所有必要元素。

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

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

我不知道这是应该如何完成,但是这对我来说是一个很容易控制事物流的方法。场景概念还可以轻松将多个场景存储为集合。由于一次存储多个场景指针,所以场景可以存储并在返回时保持它们的完整状态,或者甚至做些模糊的事情,但是当活动场景作为覆盖物覆盖它们时继续绘制各种各样的。

因此,无论如何,如果你这样做,它不完全像一个网页,但我想如果你想它正确的方式它足够相似。