Zdravím, mám docela vážnej problém.
Dělám hru. Chci udělat jednu třídu, kde budou proměnné pro práci s oknem a tak, a pak druhou, kde budou proměnné pro herní plochu a podobně.
Všechno by mělo běhat docela příjemně a bez problémů, jen jediná, ale dost zásadní věc nedokážu překousnout. Je to přiřazení funkce obsluhující zprávy třídě okna. Koukněte na kód, vypsal jsem to nejdůležitější:
//##** Třída window_setting pro práci s oknem. **##/////////////////////////////
class window_setting{ // Tady budou pouze proměnné a funkce potřebné pro // vytvoření a správu okna.
private:
HDC hDC; // Private GDI device context.
HGLRC hRC; // Permanent rendering context.
HWND hWnd; // Window handle okna.
//...
public:
window_setting(); // Bezparametrový konstruktor.
//...
bool create_game_window(core_t& core); // Je potřeba přijímat jádro, kvůli volání core.InitGL().
// Funkce komunikující se systémem (přijímá od něj zprávy).Musí mít
// přesný typ parametrů, navrací vlastně to samé, co přijímá.
LRESULT CALLBACK receive_system_messages(
HWND hWnd, // Handle For This Window
UINT uMsg, // Message For This Window
WPARAM wParam, // Additional Message Information
LPARAM lParam); // Additional Message Information
void resize_game_window();
void kill_game_window();
};
Problém nastává ve funkci bool window_setting::create_game_window(core_t&),
v místě, kde se se pokouším přiřadit třídě okna funkci zpracovávající zprávy:
//...
WNDCLASS wc; // Windows Class Structure
wc.lpfnWndProc = (WNDPROC) this->receive_system_messages; // Funkce která pracuje se zprávani od systému.
Zpráva kompilátoru hovoří celkem jasně - nesprávný typ parametrů funkce...
argument of type 'LRESULT (window_setting::)(HWND__*, UINT, WPARAM, LPARAM)' does not match 'LRESULT (*)(HWND__*, UINT, WPARAM, LPARAM)'
Takže jsem docela v háji. Zvlášť, když bych potřeboval té funkci předávat ještě parametr na core...
Ale dělat všechny proměnné globální, to opravdu ne.
Takže můžete mi prosím někdo poradit, jak by se dal ten problém řešit? Bez toho se asi dál
nehnu:(.
Jsou v SDL lepší nástroje? Má smysl se ho učit? A uměli byste v něm případně tento problém
řešit?
Za jakoukoli radu vám budu velice vděčný.