gpt4 book ai didi

c++ - 如何从实体组件系统中的子类访问属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:21 25 4
gpt4 key购买 nike

我刚开始为横向卷轴游戏开发实体组件系统。

我是 C++ 的新手,但我已经阅读了很多教程并决定最好的方法是拥有一个包含组件 vector 的实体类。然后会有一个基组件类,其中包含实际上组件作为子类。

实体.h:

#ifndef _ENTITY_H
#define _ENTITY_H

#include "header.h"

class Entity

{

public:
Entity();
~Entity();

// Vector which stores all added components
vector<Component*> Components;

// Add component method
void AddComponent(Component* component);

};

#endif

实体.cpp:

#include "header.h"
#include "Component.h"
#include "Entity.h"

Entity::Entity(){}

Entity::~Entity(){}

void Entity::AddComponent(Component* component)
{
Components.push_back(component);
}

组件.h:

#ifndef _COMPONENT_H
#define _COMPONENT_H

#include "header.h"


class Component

{

public:

// Forward declaration
class Entity;

Component();
~Component();

void Connect(Entity* entity) {}

string Name;
};


// Position component
class Position: public Component{

public:
int x, y;

};

// Display component
class Display: public Component{

public:

sf::Sprite baseSprite; };

#endif

组件.cpp:

#include "header.h"
#include "Component.h"

Component::Component(){}

Component::~Component(){}

现在要添加一个新组件,我会这样做:

Entity* new_component;
new_component = new Entity;
new_component->AddComponent(new Position);
new_component->AddComponent(new Display);

问题是,我不知道如何在添加组件后再次访问它。

例如,我希望能够访问 Position 的 x 和 y 值。但是当我尝试像这样访问列表中的组件时:

Components[i]->...

我只想出基组件类的属性。

如有任何帮助,我们将不胜感激。

最佳答案

您可以将某些类型的组件存储在某个索引中。例如,所有位置分量都存储在位置0,所有速度分量都存储在位置1。

然后你就可以很容易地检索组件

template <class T>
T * Entity::getComponent()
{
return static_cast<T*>(components[T::getIndex()]);
}

Component::getIndex() 是一个静态方法,应该返回该组件的索引。

关于c++ - 如何从实体组件系统中的子类访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709880/

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