Я пытаюсь создать на собственном игровом движке, где каждый базовый элемент представляет собой GameObject
, который будет состоять из функции обновления и других уведомителей.
Вот мой код:
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include "AssetManager.hpp"
class GameObject : public sf::Drawable, public sf::Transformable
{
public:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const{
target.draw(*this, states);
};
};
class Sprite : public GameObject, public sf::Sprite {
public:
Sprite(AssetManager assetManager, std::string assetName) : sf::Sprite(){
setTexture(assetManager.getTextureNamed(assetName));
}
};
int main(int argc, char const** argv)
{
sf::RenderWindow window(sf::VideoMode::getDesktopMode(), "");
AssetManager assetManager = AssetManager("/Users/iProgram/Desktop/My Game Engine/My Game Engine");
assetManager.loadTextureWithName("tank", "tank.png", sf::Vector2f(16,16));
Sprite tank = Sprite(assetManager, "tank");
while(window.isOpen()){
window.clear();
window.draw(tank);
window.display();
}
return EXIT_SUCCESS;
}
Обратите внимание, что менеджер ресурсов просто сохраняет текстуры в памяти и возвращает их при необходимости с заданным размером.
Проблема в строке: window.draw(tank);
, я получаю ошибку
Неоднозначное преобразование из производного класса 'const Sprite' в базовый класс 'const sf :: Drawable':
Почему я реализовал функцию рисования в классе GameObject
и как я могу это исправить?