получить данные из другого единственного класса - PullRequest
0 голосов
/ 07 ноября 2019

У меня проблема. у меня есть класс TextureManager, который заполняет свой закрытый атрибут std::map<std::string, sf::Texture> textures;, и у меня есть метод, который возвращает ссылку на определенный текст карты;и у меня есть класс astract Tile, который расширен в классах Terrain и Building.

TextureManager необходимо создать один раз, в начале игры, а затем каждую плитку, которую я создаю (например, ландшафт или здание). объекту) нужно получить их текстуру из карты текстур, но я действительно не знаю, как это сделать, я не могу создать объект TextureManager внутри Tile, или у каждой плитки будет свой собственный TextureManager, который бессмыслен, так как я хочу сделатьплитки имеют одинаковую текстуру, размещенную в текстурах.

как мне поступить в этом случае?

1 Ответ

0 голосов
/ 07 ноября 2019

Ваши объяснения кажутся немного расплывчатыми, а в вашем вопросе отсутствует код. Но я предполагаю, что вы можете дать ссылку или указатель созданной текстуры (объекта) или ее атрибутов на конструктор каждой плитки. Если вы не можете этого сделать, то создайте свой собственный класс Tile, унаследовав его от родительского класса Tile, и добавьте этот элемент в его конструктор. Таким образом, ваш производный класс получит текстуру (объект) при его создании, а затем сможет использовать ее. Затем передайте одну и ту же текстуру (объект) всем плиткам. Ваш производный класс будет выглядеть примерно так:

class derived_Tile:public Tile{
    texture & the_texture;
public:
    derived_Tile(Tile_variables_types... Tile_variables..., texture & input_texture):Tile(Tile_variables...), the_texture(input_texture){}
};

тогда, когда вы захотите их использовать:

Texture the_texture(Texture_values...);

derived_Tile_1(Tile_values..., the_texture);
derived_Tile_2(Tile_values..., the_texture);
derived_Tile_3(Tile_values..., the_texture);
.
.
.
...