gpt4 book ai didi

c++ - 基于组件的游戏实体和类型检查

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:54 26 4
gpt4 key购买 nike

我正在编写一款游戏,它将使用基于组件的实体系统。我要实现的前两个组件是 EntityRepresentation 和 EntityState。表示包含动画,状态决定实体应对游戏事件做出的 react (实体状态的示例:站立、跳跃、攻击、死亡、坠落)。

EntityRepresnetation 根据实体的 EntityState 决定在屏幕上绘制什么动画。如果实体处于“跳跃”状态,则会播放相应的动画。 (参见 EntityRepresentation::changeAnimation() 函数。)

我大概是这样写这个类的...

class EntityRepresentation
{
public:
void draw(float x, float y, long currentTime, DrawingContext& dc) {
// ...
}

void changeAnimation(const EntityState::Id& stateId) {
currentAnimation = animationMap_[stateId];
}

private:
map<EntityState::Id, const Animation*> animationMap_;
const Animation* currentAnimation_;
};

有些东西我真的不喜欢我当前的方法...>:( EntityState::Id 部分。目前,EntityRepresentation 将它持有的每个动画映射到特定的 EntityState::Id。ID 是唯一的派生自 EntityState 的每个类(对于类而言是唯一的,而不是实例)。这些 ID 基本上是必须在类的构造函数中手写的字符串,这意味着它们很容易发生名称冲突——自从我计划使游戏可编写脚本(Python)。

有人可以给我一些建议,告诉我如何缓解 ID 问题。我在同样使用 ID 的游戏中看到了很多基于组件的系统的实现,但我仍然不喜欢它们。它只是让我感到不快。

也许您可以建议更改设计,这样 EntityRepresentation 就不必知道 EntityState 的类型,同时仍然保留封装。

最佳答案

使用typeid(),就是这个意思。您可以使用 const type_info* 作为键类型。

或者,您知道,您可以只使用实际继承,例如调用虚函数来获取当前动画,这会更智能。

关于c++ - 基于组件的游戏实体和类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6371793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com