Autor | Zpráva | ||
---|---|---|---|
Tona Profil * |
#1 · Zasláno: 21. 8. 2006, 19:45:15
Zdravim. Mam naprogramovanou hru v Visual C++. Pouzil jsem funke Win32 API. Co by obnasole predelani kodu, kdybych chtel aby sel kompilovat pod linuxem ? Alespn strucene. Specha. Diky
|
||
thingwath Profil |
#2 · Zasláno: 21. 8. 2006, 19:51:19
Těžko říct, bylo by třeba zhruba vědět co a jak, to se nedá z jedné věty vytušit :-) Možná změnit malou část, možná to přepsat celé. Projekt wine poskytuje každopádně i knihovnu (winelib) kde implementuje nějaký díl WinAPI. Použití ovšem nemusí být triviální (nikdy jsem to teda neviděl).
|
||
Bubák Profil |
#3 · Zasláno: 21. 8. 2006, 19:53:52
Možná ti bude stačit, když hra půjde spustit pod wine. Víc bohužel nevím, tak neporadím.
|
||
WanTo Profil |
#4 · Zasláno: 21. 8. 2006, 21:04:43
Tona
Záleží na tom, které funkce používáš. Doporučuji podívat se na multiplatformní knihovnu SDL, ta ve hrách dokáže nahradit přímé volání Win32 API (popř. API X serveru na Linuxu). |
||
Tona Profil * |
#5 · Zasláno: 21. 8. 2006, 22:02:18
Problem je v tom, ze ja jsem to delal jako bakalarskou praci a dotaz od oponenta zni, jak by to bylo asi slozite predelat kod, nebo musel by se vubec prdelavat aby sel ZKOMPILOVAT pod Linuxwm? Jelikoz nejsem vubec kovanej v programovani pod linuxem, tak vubec nevim.
Pridavam kus kodu. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; static int iTickTrigger = 0; int iTickCount; if (GameInitialize(hInstance)) { // Inicializace herního stroje if (!GameEngine::GetEngine()->Initialize(iCmdShow)) return FALSE; // funkce pro kontrolu zpráv systému Windows while (TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { // zpraconání zprávy if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { // Kontrola zda není program pozastaven if (!GameEngine::GetEngine()->GetSleep()) { // kontrola zda již nenastal nový cyklus iTickCount = GetTickCount(); if (iTickCount > iTickTrigger) { iTickTrigger = iTickCount + GameEngine::GetEngine()->GetFrameDelay(); HandleKeys(); //kontrola klávesnice GameCycle(); } } } } return (int)msg.wParam; } // konec hry GameEnd(); return TRUE; } LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam) { // Přesměrovíní všech zpráv systému Windows hernímu stroji return GameEngine::GetEngine()->HandleEvent(hWindow, msg, wParam, lParam); } GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight) { // nastavení členských proměných m_pGameEngine = this; m_hInstance = hInstance; m_hWindow = NULL; if (lstrlen(szWindowClass) > 0) lstrcpy(m_szWindowClass, szWindowClass); if (lstrlen(szTitle) > 0) lstrcpy(m_szTitle, szTitle); m_wIcon = wIcon; m_wSmallIcon = wSmallIcon; m_iWidth = iWidth; m_iHeight = iHeight; m_iFrameDelay = 50; // 20 snímků za vteřinu m_bSleep = TRUE; m_vSprites.reserve(50); m_uiMIDIPlayerID = 0; } |
||
thingwath Profil |
#6 · Zasláno: 21. 8. 2006, 23:06:10
No jestli asi... tak to se dá odhadnout. Podle toho kódu bych řekl, že relativně dost, ale moc se v něm nevyznám (právě proto soudím tolik :-)). S winelib by to možná šlo bez úprav (nebo s málem), ale provést to by bylo dosti nejednoduché, tipuju.
Nevypadá to, že by stačilo přepsat jenom kousek, moje odpověď na takovou otázku by zněla buď (možná) s winelib, nebo těžko a po nemalých úpravách. |
||
jozob Profil |
#7 · Zasláno: 21. 8. 2006, 23:34:44
OT: Ja budem ďaľší oponent. Čo by bolo treba prepísať, aby si to mohol skompilovať na Macu? :o)
|
||
WanTo Profil |
#8 · Zasláno: 22. 8. 2006, 11:05:08
jozob
Se SDL to půjde zkompilovat téměř všude (cituji SDL supports Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and OS/2, but these are not officially supported.). A jak zkoumám ten kód, mám pocit, že by byl se SDL asi třikrát kratší. |
||
jozob Profil |
#9 · Zasláno: 22. 8. 2006, 12:08:19
WanTo
SDL je super vec. ;o) |
||
WanTo Profil |
#10 · Zasláno: 22. 8. 2006, 12:51:36 · Upravil/a: WanTo
Mimochodem, SDL se může pyšnit takovými projekty, jako je třeba UnrealTournament 2003.
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0