Witam mam problem z funkcją w kodzie , jako programista amator próbuję napisać grę ucząc się z książki SDL Game Development by Shaun Mitchell.
Załączam kody źródłowe w których coś gdzieś jest nie ok ;/ Przeanalizowałem je i nie mam pojęcia co schrzaniłem. Bardzo proszę o pomoc.
W komentarzu w Pliku Główna funkcja wyróżniłem miejsce występowania błędu.
FabrykaObiektów.h
#include<iostream>
#include"Enemy.h"
#include"Obiekty.h"
#include"Textury.h"
#include"AnimowanaGrafika.h"
#include"Funkcje.h"
#include"PrzyciskMenu.h"
#include<map>
using namespace std;
#ifndef __FabrykaObiektów__
#define __FabrykaObiektów__
class Kreator
{
public:
virtual Obiekty*KreatorObiektów()const =0 ;
Kreator(){};
virtual ~Kreator() {};
};
class StwórzObiekt
{
public:
bool Typ(string typeID, Kreator* NaszKreator)
{
map<string, Kreator*>::iterator it = m_creators.find(typeID);
if (it != m_creators.end())
{
delete NaszKreator;
return false;
}
m_creators[typeID] = NaszKreator;
return true;
}
Obiekty* create(string typeID)
{
map<string, Kreator*>::iterator it = m_creators.find(typeID);
if (it == m_creators.end())
{
cout << "Nie mozna znalezc typu pliku\t" << typeID << endl;
return NULL;
}
Kreator*NaszKreator = (*it).second;
return NaszKreator->KreatorObiektów();
}
static StwórzObiekt*Temp_Obiekt;
static StwórzObiekt * Instance()
{
if (Temp_Obiekt == 0)
{
Temp_Obiekt =new StwórzObiekt();
return Temp_Obiekt;
}
return Temp_Obiekt;
}
private:
StwórzObiekt(){};
map<string, Kreator*>m_creators;
};
#endif
Główna Funkcja
#include<iostream>
#include<SDL.h>
#include"Funkcje.h"
#include<SDL_image.h>
#include"Textury.h"
#include"Obiekty.h"
#include"Player.h"
#include"Enemy.h"
#include"Klawiatura.h"
#include"GameStateMachine.h"
#include"StanMenu.h"
#include"PlayState.h"
#include"FabrykaObiektów.h"
#include"StateParser.h"
#include"GłówneMenu.h"
#include<vector>
using namespace std;
Textury*Textury::Temp_Instance = 0;
Gra*Gra::Temp_Instance = 0;
StwórzObiekt*StwórzObiekt::Temp_Obiekt = 0;
Klawiatura*Klawiatura::s_pInstance = 0;
typedef Textury p_Textury; // p = pointer
typedef Gra p_Gra;
Obiekty*Ob;
Enemy *En;
Player* Pl;
vector<Obiekty*> Tablica_Obiektow; //Utworzenie tablicy , która przechowuje postac badz obiekt wraz z parametrami.
bool Gra::init(const char *title,int x , int y , int szer , int wys, int flag) //Utworzenie okna i rendera , nastawienie koloru rendera.
{
if (SDL_Init(SDL_INIT_EVERYTHING) == 0)
{
Okno = SDL_CreateWindow(title, x, y, wys, szer, flag);
Ren = SDL_CreateRenderer(Okno, -1, 0);
SDL_SetRenderDrawColor(Ren, 0, 0, 0, 255);
StwórzObiekt::Instance()->Typ("SDL_Obiekty", new Obiekt()); // W TEJ FUNKCJI WYSTEPUJE BŁĄD "EXPECTED A TYPE SPECIFIER"
MachineStates = new GameStateMachine();
MachineStates->pushState(new MainMenu());
}
else
{
cout << "Init Fail\n";
return false;
}
if (Okno == 0)
{
cout << "Windows Fail\n";
return false;
}
else
{
cout << "Windows Success\n";
}
if (Ren == 0)
{
cout << "Render Fail\n";
return false;
}
else
{
cout << "Render Success\n";
}
Działa = true;
return true;
}
void Gra::Quit() // Uwalnienie pamieci i takie pierdoły.
{
std::cout << "cleaning game\n";
SDL_DestroyWindow(Okno);
SDL_DestroyRenderer(Ren);
SDL_Quit();
Działa = false;
}
void Gra::Events() // Zamykanie Gry oraz obsługa myszki i klawiatury.
{
if (Klawiatura::Instance()->isKeyDown(SDL_SCANCODE_RETURN))
{
MachineStates->changeState(new PlayState());
}
Klawiatura::Instance()->update();
}
void Gra::render() //Wyświetlanie obrazków i animacji
{
SDL_RenderClear(Ren);
MachineStates->render();
SDL_RenderPresent(Ren);
}
void Gra::update()
{
MachineStates->update();
}