当前位置: 首页 > 面试题库 >

面向对象的游戏设计

詹斌蔚
2023-03-14
问题内容

我正在设计一个简单的游戏,该游戏使用Java 2D和牛顿物理学。目前,我的主要“游戏循环”如下所示:

do {
  for (GameEntity entity : entities) {
    entity.update(gameContext);
  }

  for (Drawable drawable : drawables) {
    drawable.draw(graphics2d);
  }
} while (gameRunning);

当指示实体更新自身时,它将根据当前施加在其上的力来调整其速度和位置。但是,我需要实体表现出其他行为。例如,如果“坏家伙”被玩家射击,则该实体应被销毁并从游戏世界中移除。

我的问题
:以面向对象的方式实现此目标的最佳方法是什么?到目前为止,我所见过的所有示例都将游戏循环整合到名为的类似的God类中,该类Game执行以下步骤:
检测碰撞,检查是否被坏人杀死,检查是否被玩家杀死,重画 等;以及封装所有游戏状态(剩余寿命,等等)。换句话说,这是非常 程序化的
所有逻辑都在Game类中 。谁能推荐一个更好的方法?

到目前为止,这是我想到的选项:

  • 将a传递GameContext给每个实体,如果需要,该实体可以从中删除自身,或者更新游戏状态(例如,如果玩家被杀死,则更新为“未运行”)。
  • 将每个人注册GameEntity为中心Game类的侦听器,并采取面向事件的方法;例如,碰撞将导致CollisionEvent向碰撞中的两个参与者开火。

问题答案:

我与两个商业游戏引擎紧密合作,它们遵循类似的模式:

  • 对象代表游戏实体的组件或方面(例如物理,可渲染等),而不是整个实体。对于每种类型的组件,都有一个庞大的组件列表,每个具有该组件的实体实例都有一个。

  • “游戏实体”类型本身只是唯一的ID。每个庞大的组件列表都有一个映射,用于查找与实体ID对应的组件(如果有)。

  • 如果组件需要更新,则由服务或系统对象调用。每个服务都直接从游戏循环中更新。或者,您可以从计划程序对象调用服务,该对象从依赖关系图确定更新顺序。

这是此方法的优点:

  • 您可以自由地组合功能,而不必为每种组合编写新的类或使用复杂的继承树。

  • 对于可以放在游戏实体基类中的所有游戏实体,几乎没有任何功能可以假定(灯光与赛车或天窗有什么共同点?)

  • 从ID到组件的查找可能看起来很昂贵,但是服务通过遍历特定类型的所有组件来完成大部分的繁重工作。在这种情况下,将所需的所有数据存储在一个整洁的列表中会更好。



 类似资料:
  • 本文向大家介绍C++面向对象实现五子棋小游戏,包括了C++面向对象实现五子棋小游戏的使用技巧和注意事项,需要的朋友参考一下 尽量将面向对象的思想融入进程序中 ChessBoard.h ChessBoard.cpp Player.h Player.cpp main.cpp 以上所述就是本文的全部内容了,希望能够对大家熟练掌握C++有所帮助。

  • 游戏对象的内容: 数据库原则上在游戏过程中是不会被写入的,而针对地图上人物的走动等等情况,发生变化的是游戏对象。 在Scene_Title脚本中,会生成各种游戏对象,比如command_new_game的方法就是其中的一个,这个方法是在选择了标题画面中的[新的游戏]的时候被运行的。 # 生成各种游戏对象 $game_temp = Game_Temp.new $game_system = Game_

  • GameObjects are containers for all other Components. All objects in your game are inherently GameObjects. 游戏对象是所有其他组件的容器。在你的游戏中的所有物体都是游戏对象。 An empty GameObject 一个空的游戏对象 Creating GameObjects 创建游戏对象 Gam

  • GameObjects are the most important objects in Unity. It is very important to understand what a GameObject is, and how it can be used. This page will explain all that for you. 游戏对象是Unity最重要的对象,这对于了解什么是

  • 7.4 面向对象设计* 理解了面 向 对象的基 本 概念之后 , 就可以应 用 这些概念 来 进行面向 对 象 设 计(object-oriented design,简称 OOD)。 传统的程序设计方法是结构化的自顶向下设计,其思想是将软件系统分解为若干个功能, 每个功能都是对数据的一个操作过程。功能又可以划分为若干个子功能,如此反复分解下去, 直至每个功能所对应的操作过程显而易见为止。在分解功能

  • “在面向对象编程中,抽象是对用户隐藏实现细节的过程,只有功能才会提供给用户。” 我一直在试图理解抽象,有人能告诉我们如何准确地隐藏实现细节吗?使用一个程序