我正在设计一个简单的游戏,该游戏使用Java 2D和牛顿物理学。目前,我的主要“游戏循环”如下所示:
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
当指示实体更新自身时,它将根据当前施加在其上的力来调整其速度和位置。但是,我需要实体表现出其他行为。例如,如果“坏家伙”被玩家射击,则该实体应被销毁并从游戏世界中移除。
我的问题
:以面向对象的方式实现此目标的最佳方法是什么?到目前为止,我所见过的所有示例都将游戏循环整合到名为的类似的God类中,该类Game
执行以下步骤:
检测碰撞,检查是否被坏人杀死,检查是否被玩家杀死,重画 等;以及封装所有游戏状态(剩余寿命,等等)。换句话说,这是非常 程序化的 ,
所有逻辑都在Game类中 。谁能推荐一个更好的方法?
到目前为止,这是我想到的选项:
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)。 传统的程序设计方法是结构化的自顶向下设计,其思想是将软件系统分解为若干个功能, 每个功能都是对数据的一个操作过程。功能又可以划分为若干个子功能,如此反复分解下去, 直至每个功能所对应的操作过程显而易见为止。在分解功能
“在面向对象编程中,抽象是对用户隐藏实现细节的过程,只有功能才会提供给用户。” 我一直在试图理解抽象,有人能告诉我们如何准确地隐藏实现细节吗?使用一个程序