【发布时间】:2020-08-07 15:02:17
【问题描述】:
我正在使用 OpenGL c++ 制作的小游戏引擎制作一个小游戏。 我必须制作许多类,如 Camera、BatchRenderer、AudioEngine、ParticleEngine、Level、Player、Zombie、Humans 等。现在 Player 必须与 Camera、BatchRenderer、AudioEngine、ParticleEngine、Level 类中的关卡数据、Zombie、Human 等类进行交互等。我通过在我的 Main Game 类中初始化的引用传递其中的大部分。
//在Main Game类和Player中创建的AudioEngine和ParticleEngine需要播放声音和模拟粒子。渲染播放器需要 TextureID、位置、半径(大小)、旋转、深度和颜色。
Player::Player(AudioEngine& a_audioEngine, ParticleEngine& a_particleEngine
GLuint a_textureID, glm::vec2 a_position, float a_radius,
float a_rotation, float a_depth, Color a_color)
{...}
// 用于检查玩家是否在视野中的相机。 levelData、僵尸、人类检查与 Player 的碰撞检测。
void Player::update(Camera& camera, std::vector<std::string>& levelData,
std::vector<Zombie>& zombies, std::vector<Human>& humans,
float deltaTime)
在这里您可以看到传递给玩家类的参数过多,并且将来还需要更多。 但是我读到很多人说在一个函数中有两个或三个以上的参数是不好的。在我的游戏中,有许多类需要超过 5 或 6 个参数。
这适合游戏还是不好的做法? 请告诉我如何解决这个问题。
抱歉英语不好。 非常感谢您的阅读。
【问题讨论】:
-
也许您可以拥有一个包含当前游戏实例的所有相关对象的
Game类?可能可以重新设计事物以减少所需参数的数量。没有更多细节很难具体说明。 -
你可以阅读中介者模式。这可能会有所帮助。
-
你之前问过同样的问题。如果问题关闭,您可以对其进行编辑,然后将对其进行审核,如果问题得到解决,最终将重新打开 (stackoverflow.com/q/61390127/4117728)
-
抱歉,有些人说这个问题不完整,而且缺乏信息。而且我认为更新问题是行不通的。
-
你让你的球员承担了太多的责任。将音频、渲染、碰撞、游戏规则等“系统事物”留在播放器之外,让这些系统了解播放器(和其他事物)并对其所做的事情做出反应。
标签: c++ parameters arguments game-engine