Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface GUI和游戏程序流程与Web程序相比如何_User Interface_Program Flow - Fatal编程技术网

User interface GUI和游戏程序流程与Web程序相比如何

User interface GUI和游戏程序流程与Web程序相比如何,user-interface,program-flow,User Interface,Program Flow,我开发Web应用程序已经有一段时间了,我已经涉足GUI和游戏应用程序开发 在web应用程序(php for me)中,对该文件发出请求,该文件包含将信息处理到内存中所需的所有文件,然后每个请求的流程都是自上而下的。(主要是) 我知道,对于游戏来说,动作发生在游戏循环中,但如何将游戏的所有不同元素分层到单个循环中(菜单系统、gui、资产加载和3d世界),并不断加载和卸载某些东西 对于GUI程序也是一样,我相信存在某种“应用程序循环” 是否大多数项都被调用到内存中然后被访问,是否在需要时链接并加载到

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

在web应用程序(php for me)中,对该文件发出请求,该文件包含将信息处理到内存中所需的所有文件,然后每个请求的流程都是自上而下的。(主要是)

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

对于GUI程序也是一样,我相信存在某种“应用程序循环”

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


帮助我更快开发web应用程序的是,当我了解程序流程时,它不需要详细说明,只需要一般的想法或伪代码。

对于应用程序和游戏,软件是事件驱动的。用户使用键盘或鼠标执行“操作”,该事件将发送到软件的其余部分

在游戏中,游戏循环是很重要的,因为它专注于处理屏幕和游戏状态。许多游戏需要实时性能。使用现代3D图形API,大部分屏幕处理都可以转储到GPU上。但是,游戏状态由主循环跟踪。一个团队在游戏中的大部分工作都集中在使循环的处理变得非常平滑上

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

对于应用程序,顺序为

  • 用户执行X、X操作,并将相关信息(如X、Y坐标)发送到UI_控制器
  • UI决定执行哪个命令
  • 命令被执行
  • 模型/数据已修改
  • 该命令告诉UI_控制器更新UI的各个区域
  • UI_控制器重新绘制UI
  • 命令返回
  • 应用程序等待下一个事件

  • 这有几种变体。该模型允许侦听器等待数据中的更改。当数据丢失时,侦听器执行并重新绘制UI

    几乎所有这些都有一个循环,但这并不是你在大部分发展过程中都会想到的

    如果您后退一步,您的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;
    }
    

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

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

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

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

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

    我不知道这是不是应该这样做,但对我来说,这是一个非常简单的方法来控制事物的流动。场景概念还可以轻松地将多个场景存储为集合。使用同时存储在排序堆栈中的多个场景指针,场景可以保留存储,并在返回时保持其完整状态,甚至可以执行诸如“暗淡”之类的操作,但在活动场景作为排序覆盖绘制时继续绘制

    所以不管怎样,如果你这样做,它并不完全像一个网页,但我想如果你用正确的方式思考它,它就足够相似了


    web开发中循环的相似性值得称赞。