Gioco con Visual Studio 2019 e con SDL

di il
7 risposte

Gioco con Visual Studio 2019 e con SDL

Salve a tutti. Sto crendo un piccolo gioco con c++, per "tenermi in allenamento", utilizzando Visual Studio 2019 e SDL. Sto riscontrando alcuni problemi, in quanto in fase di compilazione, in alcuni file header non mi riconosce alcune classi come tipo di dato o spazio di nome. eppure ho utilizzato il relativo include. Per esempio in questo file:
#pragma once

#include <string>
#include <SDL.h>
#include "ECS.h"
#include "TransformComponent.h"
#include "Texture.h"
#include "Game.h"

class ColliderComponent : public Component
{
public:
	SDL_Rect collider;
	std::string tag;

	SDL_Texture* tex;
	SDL_Rect srcR, destR;

	TransformComponent* transform;

	//costruttore
	ColliderComponent(std::string t) { tag = t; }
	ColliderComponent(std::string t, int x_pos, int y_pos, int size) {
		tag = t;
		collider.x = x_pos;
		collider.y = y_pos;
		collider.h = collider.w = size;
	}

	void init() override {
		if (!entity->has_component<TransformComponent>()) {
			entity->add_component<TransformComponent>();
		}

		transform = &entity->get_component<TransformComponent>();

		tex = Texture::load_texture("images\\Collision_text.png");
		srcR = { 0, 0, 32, 32 };
		destR = { collider.x, collider.y, collider.w, collider.h };
	}

	void update() override {
		if (tag != "terrain") {
			collider.x = static_cast<int>(transform->position.x);
			collider.y = static_cast<int>(transform->position.y);
			collider.w = transform->width * transform->scale;
			collider.h = transform->height * transform->scale;
		}

		destR.x = collider.x - Game::camera.x;
		destR.y = collider.y - Game::camera.y;
	}

	void draw() override {
		Texture::Draw(tex, srcR, destR, SDL_FLIP_NONE);
	}
};


Mi da problemi tipo:

C2653 'Texture' non è il nome di una classe o di uno spazio dei nomi
C3861 'load_texture': identificatore non trovato

Eppure ho incluso il file header TEXTURE.H ed è questo:
#pragma once

#include <SDL.h>
#include <SDL_image.h>
#include "Game.h"

class Texture
{
public:
	//inizializzare una texture, per esempio i personaggi
	static SDL_Texture* load_texture(const char* fileName);
	
	static void Draw(SDL_Texture* tex, SDL_Rect src, SDL_Rect dest, SDL_RendererFlip flip);
};
Stessi problemi per il file Game, sempre all'interno del primo file, che è questo:
#include <SDL.h>
#include <SDL_image.h>
#include <vector>
#include <iostream>
#include "AssetManager.h"
#include "Map.h"
#include "SpriteComponent.h"
#include "KeyboardController.h"
#include "Collision.h"
#include "TransformComponent.h"

class Game
{
public:
	//costruttore e distruttore
	Game();
	~Game();

	void init(const char* title, int width, int height, bool fullscreen);

	void handle_events();
	void update();
	void clear();
	void render();

	//metodo per acquisire dati membri
	bool running() { return is_running; }

	static AssetManager* assets;
	static SDL_Renderer *renderer;
	static SDL_Event event;
	static bool is_running;
	static SDL_Rect camera;
	
	//enumerazione dei vari livelli del gioco
	enum layers : std::size_t {
		layer_map,
		layer_player,
		layer_colliders
	};
private:
	SDL_Window* window;
};
Inoltre questo tipo di errore viene fuori anche in altri file e non so come risolverlo. In realtà mi era già capitato prima, sempre in questo progetto, si è risolto ma non ho capito come.

Grazie in anticipo per le eventuali risposte e ovviamente se servono altri file non esitate a dirmelo.

7 Risposte

  • Re: Gioco con Visual Studio 2019 e con SDL

    Domanda stupida, come hai fatto a setup SDL per visual studio 2019? a me da una marea di errori...
  • Re: Gioco con Visual Studio 2019 e con SDL

    Controlla che Texture.h e relativa implementazione vengano compilati correttamente.
  • Re: Gioco con Visual Studio 2019 e con SDL

    giammo ha scritto:


    Domanda stupida, come hai fatto a setup SDL per visual studio 2019? a me da una marea di errori...
    Sono andato sulle proprietà del progetto e poi
    1) C/C++ -> generale -> directory di inclusione aggiuntive e qui inserisci il percorso della directory "include"
    2) Linker -> Generale -> Directory librerie aggiuntive e inserisci il percorso della directory lib (in realtà nel file che avevo trovato io all'interno della cartella lib c'erano altre due cartelle "x86" e "x64" quindi in realtà devi includere una di queste due)
    Io ho inserito quella x64 e dentro c'era un file .dll che va inserito all'interno della cartella del progetto, dove stanno i vari file cpp e h, e tre file .lib. tra questi ultimi file c'erano due che si chiamano SDL2.lib e SDL2main.lib e li ho inclusi su Linker -> Imput -> Dipendenze aggiuntive. Stessa cosa c'era all'interno della cartella x86
  • Re: Gioco con Visual Studio 2019 e con SDL

    Alexv ha scritto:


    Controlla che Texture.h e relativa implementazione vengano compilati correttamente.
    il file Texture.h viene compilato correttamente e non da nessun errore. Oltre ad errori come quelli già detti che sono presenti in altri file, mi escono tre errori in particolare nel file Game.h, ovvero:

    C2143 errore di sintassi: ';' mancante prima di '*'
    C4430 identificatore di tipo mancante, verrà utilizzato int. Nota: default-int non è più supportato in C++
    C2238 token imprevisti prima di ';'

    Tutt'e tre riguradante la riga:
    	static AssetManager* assets;
    
    Potrebbe essere questo errore a causarmi tutti gli altri ma non riesco a capire che problema possa esserci. Il file AssetManager.h è questo:
    #pragma once
    
    #include <map>
    #include <string>
    #include <SDL.h>
    #include "ECS.h"
    #include "Texture.h"
    
    class AssetManager
    {
    public:
    	AssetManager(Manager* man);
    	~AssetManager();
    
    	void add_texture(std::string id, const char* path);
    	SDL_Texture* get_texture(std::string id);
    private:
    	Manager* manager;
    	std::map<std::string, SDL_Texture*> textures;
    };
    
    
  • Re: Gioco con Visual Studio 2019 e con SDL

    Guardando sembra che ci sia un problema di inclusioni cicliche:
    Nel primo file includi Texture.h
    In Texture.h includi Game.h
    In Game.h includi AssetManager.h
    In AssetManager.h includi Texture.h

    Hai davvero bisogno della classe Game in Texture e non viceversa?
  • Re: Gioco con Visual Studio 2019 e con SDL

    Alexv ha scritto:


    Guardando sembra che ci sia un problema di inclusioni cicliche:
    Nel primo file includi Texture.h
    In Texture.h includi Game.h
    In Game.h includi AssetManager.h
    In AssetManager.h includi Texture.h

    Hai davvero bisogno della classe Game in Texture e non viceversa?
    Nel file Texture.h go inserito Game in quanto mi serve per il relativo file Texture.cpp.
  • Re: Gioco con Visual Studio 2019 e con SDL

    Volevo aggiornare che ho risolto il problema. Semplicemente avevo inserito gli include che servivano ad un file cpp tutti insieme nel relativo file .h, lasciando al file cpp solo l'include del relativo file header. Immagino ciò mi creava appunto problemi di inclusioni cicliche
Devi accedere o registrarti per scrivere nel forum
7 risposte