Questions tagged «game-loop»

中央代码循环负责处理正在运行的游戏。在最基本的状态下,它接受输入,解析实体的动作并渲染场景。

3
C ++中的有限状态机
因此,我已经阅读了很多有关使用FSM进行游戏状态管理的知识,例如FSM是什么,以及使用堆栈或状态集构建状态。我经历了所有这些。但是,我一直坚持为此目的编写一个经过精心设计的FSM 实际实现。具体而言,一个人如何干净地解决状态之间的转换问题(一个状态应该如何使用其他状态的数据),等等。有没有人有使用C ++设计或编写实现的技巧,或者还有更好的代码示例?

9
实体死了后,如何最好地将其从游戏循环中删除?
好的,所以我有一个遍历并更新的所有实体的大清单。在AS3中,我可以将其存储为数组(动态长度,无类型),向量(类型)或链表(非本地列表)。目前,我正在使用数组,但如果速度更快,我打算更改为Vector或链表。 无论如何,我的问题是,当实体被销毁时,应如何将其从列表中删除?我可以取消其位置,将其剪接或只是在其上设置标记以说“跳过我,我死了”。我正在汇总我的实体,因此已死亡的实体很可能在某个时候再次处于活动状态。对于每种类型的馆藏,我最好的策略是什么,哪种馆藏类型和删除方法的组合最有效?
16 game-loop 

2
半固定或完全固定的时间步?
我正在制作iphone shmup,并试图确定要使用哪种类型的游戏循环。我想使用半固定时间步或完全固定时间步。 使用半固定时间步长,我将进行零次或多次update(FIXED_INTERVAL)调用,然后进行一次update(dt)调用,其中每个游戏循环中dt <= FIXED_INTERVAL。据我所知,这种方法的缺点是我的物理update(dt)逻辑将更加难以编程,因为我基本上必须为每次更新都假设一个变量dt。然后我还听说由于浮点值每次都不相同,因此每次游戏的运行都会稍有不同。 然后用固定的时间步长,我进行零次或多次update(FIXED_INTERVAL)调用,然后进行一次插值(dt / FIXED_INTERVAL)调用,其中每个游戏循环中dt <FIXED_INTERVAL。 因此,看来我真正要做的一个重大决定是:我是否想应对使用变量dt实现update(dt)的挑战,还是我想应对实现插值的挑战? 现在,根据我的阅读,大多数人都说要使用完全固定并进行插值。但是,当我考虑实现插值时,似乎比带有变量dt的update(dt)要复杂得多。这是因为如果使用插值,则必须记住先前的状态和当前的状态。因此,如果我想使用插值法,我必须提出一个额外的间接层,以抽象出整个游戏状态。在半固定的时间步中,我不必使用插值法,而我也不必提出游戏状态抽象,因为总只有一个游戏状态,而这仅仅是代表我的敌人和敌人的“全局数组”子弹等 因此,更实际的选择是:知道变量dt会使我的物理更新变得复杂,因此我是否可以半固定地实现它。还是我使用完全固定的并尝试提出游戏状态抽象,以便可以跟踪先前状态和当前状态以执行插值?
15 game-loop 

2
二维侧滚动的“最佳”游戏循环
是否可以为2D侧滚动游戏循环描述“最佳”(就性能而言)布局?在这种情况下,“游戏循环”接受用户输入,更新游戏对象的状态并绘制游戏对象。 例如,拥有一个具有深层次继承层次的GameObject基类可能对维护很有帮助...您可以执行以下操作: foreach(GameObject g in gameObjects) g.update(); 但是我认为这种方法会产生性能问题。 另一方面,所有游戏对象的数据和功能都可以是全局的。这将是维护上的麻烦,但可能更接近于性能最佳的游戏循环。 有什么想法吗? 我对接近最佳游戏循环结构的实际应用感兴趣...即使我为了获得出色的性能而为维护感到头疼。

3
游戏循环,如何检查条件一次,先做某件事,然后再不做
例如,我有一个Game类,它保留了一个int跟踪玩家生活的信息。我有条件 if ( mLives < 1 ) { // Do some work. } 但是,这种情况会不断触发,并且工作会反复进行。例如,我想设置一个计时器以在5秒内退出游戏。当前,它将继续将其设置为每帧5秒,并且游戏永远不会结束。 这只是一个例子,我在游戏的多个方面也遇到相同的问题。我想检查某种情况,然后一次只做一次,然后再不检查或再次执行if语句中的代码。我想到的一些可能的解决方案是bool针对每个条件设置a ,并bool在条件触发时设置。但是在实践中,这很麻烦bools,因为必须将它们存储为类字段,或者静态地存储在方法本身中,因为它们很多。 对此的正确解决方案是什么(不是针对我的示例,而是针对问题域)?您将如何在游戏中做到这一点?
13 c++  game-loop 

4
在角色扮演游戏中设定战斗顺序
我正在尝试写一个简短的“游戏”,玩家要四处游荡并与怪物战斗,但我不知道如何处理战斗。 例如,假设我有一个“战士”和一个“巨魔”。两者如何打架?我知道我可以做类似的事情 Conan = Warrior.new(); CaveTroll = Troll.new(); Conan.attack(CaveTroll); CaveTroll.attack(Conan); 但是游戏的哪一部分控制怪物?我是否只是将上述序列循环粘贴直到其中一个死亡?还是游戏“引擎”需要专门处理战斗的部分?还是这是巨魔人工智能中需要照顾其行为的一个方面? 另外,谁/什么决定怪物采取的行动?也许巨魔可以扑,踢,咬,施展咒语,喝药水,使用魔法物品。游戏引擎会确定Troll采取什么动作还是Troll类管理的事情? 抱歉,我不能更具体,但是我需要一些指导,以解决这个问题。

2
在游戏循环中暂停游​​戏
在游戏循环内,通过按P暂停游戏,这意味着游戏循环不再运行。问题在于,该循环暂停后,由于它位于循环本身内部,因此无法再次按下P以恢复该循环。如何使其再次按下P时使循环再次工作?
12 game-loop 

3
极度困惑“恒定游戏速度最大FPS”游戏循环
我最近在Game Loops上阅读了这篇文章:http : //www.koonsolo.com/news/dewitters-gameloop/ 推荐的最后一种实现方式使我深感困惑。我不明白它是如何工作的,看起来像是一团糟。 我了解以下原则:以恒定的速度更新游戏,剩下的一切将使游戏尽可能多地渲染。 我认为您不能使用: 获取输入的25个报价 渲染游戏975次 方法,因为您将在第二部分的第一部分得到输入,这会感觉很奇怪吗?还是那是文章中正在发生的事情? 实质上: while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) 那怎么有效呢? 让我们假设他的价值观。 MAX_FRAMESKIP = 5 让我们假设next_game_tick,它是在初始化之后的瞬间分配的,在说主游戏循环之前... 500。 最后,由于我在游戏中使用SDL和OpenGL,并且仅将OpenGL用于渲染,因此假设GetTickCount()返回自调用SDL_Init以来的时间。 SDL_GetTicks -- Get the number of milliseconds since the SDL library initialization. 资料来源:http : //www.libsdl.org/docs/html/sdlgetticks.html 作者还假设: DWORD next_game_tick = GetTickCount(); // GetTickCount() returns …

2
这两个代码中的哪个“更好”?制作局部变量还是类变量?
我制作了更多游戏,问了更多愚蠢的问题。 希望这一段很简短。我正在创建一个非常基本的类,该类通过向刚体施加力来移动Player对象,但这让我想知道,我应该对rb进行类引用还是对Update每帧进行局部引用?(请记住,它已经存在于Monobehaviour.GameObject统一父类中)。 我想知道是否做很多局部变量会减慢整个循环的速度(通过局部变量,我的意思是在函数本身内部,而不是在类的顶部,希望我使用正确的术语)。 这就是我想做的两种方式: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } 要么... public class Player : MonoBehaviour { Rigidbody rb; private void Awake() { rb = GetComponent<Rigidbody>(); } private void FixedUpdate() { …
11 unity  c#  game-loop 

3
UPS和FPS-我应限制什么,为什么?
我目前正在使用C ++和SDL2编写游戏,我想知道一件事-限制每秒的帧数(FPS)和/或每秒的更新数(UPS)是否有意义? 我的想法是,如果您限制UPS,则基本上可以控制游戏的速度-如果玩家每次更新移动1px,并且您始终每秒更新30次,则他将以30px / s的速度移动,而您由于每秒的计算量减少,这也可能减轻CPU的负担。如果限制FPS,则每秒的调用次数会减少,因此可以减轻GPU负担。我希望我能正确理解所有这些内容,如果不能,请随时纠正我。 我的问题是-我应该在游戏中限制什么?FPS?UPS?都?都不行 有另一种更好的方法吗?在大多数游戏中这是如何完成的,为什么? 答案非常感谢!
11 game-loop  logic  sdl2 


4
对于简单游戏,是否有单独的游戏循环线程是必需的?
我是游戏开发的新手。为了学习,我正在android平台上重新创建此游戏。您可以在上面的链接中观看游戏视频。这是一个简单的游戏。 我已经阅读了很多有关游戏开发入门的文章,几乎所有文章都建议在单独的线程上使用游戏循环,这对于其他游戏也很有意义。但是,对于这个特定的游戏,我需要启动一个单独的线程吗?

2
Java 2D游戏编程:制作游戏循环的不同方法
我是Java游戏编程的新手,但是我阅读的内容越多,我就越困惑,因为我已经看到了制作游戏循环的几种不同方法:1.使用Timer类的标准方法(似乎要少一些)精确)。2.使用System.nanoTime的更精确的方法。3.使用scheduleAtFixedRate的简单方法。 通常应首选哪种方法,每种方法的优缺点在哪里?在此先感谢您的任何信息。

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

2
重播系统:记录输入或事件?
我读了这篇文章:如何设计一个重放系统,但是它并不能真正回答我的问题。 我的游戏是用游戏的客户端“视图”作为与服务器“模型”和“控制器”分开的程序构建的。(有点像mmo或以此方式构建的任何多人游戏)。服务器端始终是游戏的“真相”,它仅接受动作请求作为来自客户端的输入,并输出事件和“当前状态”消息。 游戏模型和规则是完全确定的,并且具有固定的“刻度”更新周期,因此在服务器端,我既可以记录发送到客户端视图的事件,也可以记录操作请求。两者都与特定的循环编号相关。 问题是:在这种情况下,要设置重放系统,我应该使用输入内容还是用户操作请求(如此处所建议)或事件? 在我看来,两者将给出完全相同的输出。我可以看到的唯一区别是: 事件提供真正的输出,而必须处理操作请求以提供事件。 动作请求可能要记录的数据要少得多。 还有其他事情要考虑吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.