游戏开发论坛

 找回密码
 立即注册
搜索
楼主: tdzl2003

模式:分解游戏循环

[复制链接]

13

主题

245

帖子

245

积分

中级会员

Rank: 3Rank: 3

积分
245
发表于 2007-10-29 23:14:00 | 显示全部楼层

Re:模式:分解游戏循环

这个东西,写了跟没写,一样。。。

基本上,是程序,都应该写的出来;
基本上,是项目,都没那么简单;

所以,结论:写了跟没写,一样。。。

抱歉,无意中看到,想到就说了,说的不好,请别见怪。。。

4

主题

25

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2007-11-25 09:35:00 | 显示全部楼层

Re:模式:分解游戏循环

注意我的前提:
针对游戏程序和游戏逻辑一般不需要倚赖消息机制的特点

又没要求你用
我只是提出有这么一个方法
而且我个人认为比较好用。
我们目前的几个小Demo都是这样写的。

To 11楼:
标准结构学过的人都会
你不觉得有的时候它很丑陋么?当然并不是所有时候都丑陋。
至少我觉得。

To 8楼:
我的程序实际运行起来对API调用的顺序和次数与标准的消息循环完全一样,还减少了状态机过于复杂带来的损耗。
你是从哪里看出来实时性不佳的呢?
至于框架灵活性,我说了这个框架的使用是有前提的,不适合的时候使用它当然不好。

6

主题

35

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2008-2-19 20:21:00 | 显示全部楼层

Re:模式:分解游戏循环

睡着了吧

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2008-2-19 21:41:00 | 显示全部楼层

Re:模式:分解游戏循环

跳来跳去,总好过于一个文件打开了几十个上百个case:...break吧
这种写法至少可以把逻辑分散开来
分到各个组件上
但我觉得不管什么方式最重要还是文档要写周全
我没什么大理论大概念
但最近给编码乱的事整得快不成人了
现在这年月大家不知道是否真的忙到多写点注释的时间都没了...
牢骚完,活还得继续做,明天又是一天疯狂编码的日子....路过

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-2-27 22:39:00 | 显示全部楼层

Re:模式:分解游戏循环

SetABC(){ m_nextABC = ... }

Update()
{
    m_nextABC= ...
}

PostUpdate()
{
    m_ABC = m_nextABC;
    m_nextABC = m_ABC;
}

在  i -> Update(); 过程中,不应该改变系统状态,否则不同步。
当所有Process的Update结束后,再进行一便 i-&gtostUpdate()循环。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-2-27 22:56:00 | 显示全部楼层

Re:模式:分解游戏循环

《游戏编程全接触》中提到了这么一种模式,
既可以多个模块“同时”工作,又可以实现状态的切换。

楼主的“State”,也被称为“Process”。

class Process
{ friend CProcessManager;
  bool m_bKill;
  CProcess *m_pNextProcess;
private: virtual ~CProcess(){}
};

看看ProcessManager:

CProcessManager::UpdateAllProcesses()
{
  if( i -> m_bKill )
  {
      m_pProcessList->remove( i );
      m_pProcessList->add( i->m_pNextProcess );
      delete i;
  }
}
////////如果要State1 -> State2只需要:///////////
pState1 -> m_pNextProcess = pState2;
然后,结束进程 pState1->m_bKill = true;

2

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2008-3-6 22:57:00 | 显示全部楼层

Re:模式:分解游戏循环

在你停止绘制处理堆积消息的时候出现较长时间的等待怎么办?玩家会认为你的程序死掉了(虽然是假死)。
ui与逻辑的分离,楼主连这最基本的原则都违背了。
我不觉得状态机有什么不好。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-4 08:54:00 | 显示全部楼层

Re: Re:模式:分解游戏循环

活在天堂: Re:模式:分解游戏循环

在你停止绘制处理堆积消息的时候出现较长时间的等待怎么办?玩家会认为你的程序死掉了(虽然是假死)。
ui与逻辑的分离,楼主连这最基本的原则都违背了。
我不觉得状态机有什么不好。



在处理积压消息的过程中,逻辑必须继续被调用。
仅仅是停止Render。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2008-4-7 14:52:00 | 显示全部楼层

Re:模式:分解游戏循环

我目前用的:

  1. int Game::main( int argc, char* argv[] )
  2. {
  3.     while( _running ){
  4.         switch( _state ){
  5.             case RUNNING:
  6.                 breathe();
  7.                 render();
  8.                 break;
  9.             case PAUSE:
  10.                 render();
  11.                 break;
  12.             case FINI:
  13.                 _running= false;
  14.                 fini();
  15.                 break;
  16.             default:
  17.                 _state= FINI;
  18.                 break;
  19.         }
  20.     }
  21.     return _state;
  22. }
复制代码

以上下划线开头的变量都是成员变量,大写的都是static const int,函数都是virtual。

28

主题

433

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2008-4-10 22:21:00 | 显示全部楼层

Re:模式:分解游戏循环

我怎么觉得和dos时代 的 游戏开发 没啥 区别~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 14:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表