Zobrazit předchozí téma :: Zobrazit následující téma |
Portujete své hry pro Mac? |
Ano. |
|
17% |
[ 4 ] |
Ne a nebudu. |
|
60% |
[ 14 ] |
Ne, ale plánuju, že někdy budu. |
|
21% |
[ 5 ] |
|
Celkem hlasů : 23 |
|
Autor |
Zpráva |
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 22. srpen 2011, 01:44:51 Předmět: Portování SDL her pro Mac OS X |
|
|
Moje staré hry a projekty spousty lidí tady na fóru používají multiplatformní knihovnu SDL. Tak kdyby někoho zajímalo, jak takovou hru naportovat i pro Mac, tak tady je dobrý návod:
www.noquarterarcade.com/xcode-sdl-development-setup
Dnes jsem podle něj za odpoledne naportoval svou hru Becher Rescue (stáhnout pro Mac, web už není; konfigurační soubor je Becher Rescue.txt v [domovská složka]/Library/Application Support, vytvoří se při spuštění hry - správně by to mělo být v podsložce se jménem hry):
Funguje fullscreen i hraní v okně, zvuk a hudba, všechno. Návod je udělán tak, že přímo do složky .app automaticky Xcode kopíruje SDL a SDL_mixer binárky a data hry (návod popisuje použití i dalších knihoven). Výsledná hra pak na cílovém počítači tedy nepotřebuje nainstalovaný SDL framework a další knihovny. Je to pro Mac OS X 10.4 a vyšší, procesory Intel a PowerPC (podporu PowerPC jsem přidal později, k tomu druhé poznámky úplně dole).
Moje poznámky k návodu:
- Ve verzi pro Mac zrušte přenastavování aktuální složky kvůli hledání dat hry, řešení v návodu to řeší samo.
- SDL template si vemete ten pro vaší verzi OS X, návod je pro 10.6, takže třeba já s 10.5 zkopíroval obsah TemplatesForXcodeLeopard.
- Je nutné změnit inklůdy z <GL/gl.h> na <OpenGL/gl.h>, stejně pro glu.h a glext.h, a pak podobně <SDL/SDL_mixer.h> na "SDL_mixer.h"
Kromě těch vybraných inklůdů a zrušení svého přenastavení adresáře v inicializaci hry jsem neměnil jediný řádek kódu! Nebudu zde říkat, jestli má smysl portovat hry i pro Mac, jen chci ukázat, jak je to snadné. Becher Rescue jsem udělal před 8 lety a ohledně multiplatformnosti jsem specifika pro Mac vůbec neřešil, hra cílila jen Windows a Linux.
EDIT: Udělal jsem úpravy pro podporu Maců s procesory PowerPC, takže nová verze teď jede i tam. Moje poznámky:
- Inklůd pro převodní funkce v SDL: #include <SDL/SDL_endian.h>
- Je třeba převést všechno, co přečtete z disku a na disk zapíšete (předpokládám, že na disku je to pro Intel x86)).
- 8bit čísla neřešíte; 16 a 32bit čísla převedete funkcemi SDL_SwapLE16() a SDL_SwapLE32() (na Intelu nic nedělají).
- Floaty mi SDL_SwapLE32() převádělo blbě, tak jsem vygooglil a použil funkci FloatSwap() odtud.
- Když jsem uložil screenshot z OpenGL do souboru BMP, byly prohozeně barvy. Tak jsem jen změnil formát ve funkci glReadPixels() na ten s prohozenými barvami (GL_RGB -> GL_BGR).
- Věci načítané cizími knihovnami neřešíte, ty se o vše postarají samy. Týká se načítání obrázků, audia apod.
- Mac verze teď ukládá screenshoty do domovské složky.
- Mac verze má F8 pro zobrazení FPS a F9 pro uložení screenshotu.
Screenshot z 6 let starého notebooku Apple iBook s procesorem PowerPC G4:
EDIT2: Protože už web není, tak soubory nahrány na ulož.to a obrázky na postimg.org. Dále přidány zdrojáky Mac verze (kde je nastaveno v projektu SDL pro Xcode pro OS X 10.5 - pro jiné podle návodu výše). Zdrojáky odpovídají tomu, že to byla moje úplně první C/C++ hra, rok výroby 2003.
Naposledy upravil Ladis dne 4. listopad 2014, 10:41:07, celkově upraveno 7 krát |
|
Návrat nahoru |
|
|
Slappy
Založen: 31. 07. 2009 Příspěvky: 169 Bydliště: Zilina
|
Zaslal: 22. srpen 2011, 05:59:04 Předmět: |
|
|
Krasa!
SDl je silne v tom, ze bezi aj na doma vyrobenopm kavovare.
Ja som si takto preportoval jednu hru z Win na Linux a nasledne na Wii a Nintendo DS.
Na DSku sice hra nesla [procesor nezvladal] ale bolo to uplne jednoduche! _________________ Skinovane instalatory pre NSIS a Inno Setup, zdarma pre SK/CZ projekty: www.graphical-installer.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 22. srpen 2011, 16:36:36 Předmět: |
|
|
Pekne, toto me vzdycky zajimalo (hlavne z duvodu portovani MultiRacera). _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 22. srpen 2011, 17:37:24 Předmět: |
|
|
No tak teď ti stačí jen sehnat počítač Mac nebo aspoň virtuálně ve VMware, pokud ti nevadí, že tam není 3D akcelerace (ale 2D akcelerace tam už je, takže systém běží normálně rychle a ne že laguje psaní i v TextEditu). _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 22. srpen 2011, 18:03:14 Předmět: |
|
|
Toto je zrejme opacny extrem oproti tomu co robim ja - port hry z DirectX/C++ do XNA / C#.
Kde uplne vsetok kod musi byt prepisany od piky a to XNA je nakoniec dost odlisne od DirectX temer uplne vo vsetkom (snad s vynimkou zachovania konceptu 3d sceny ako takej). |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 27. srpen 2011, 22:51:52 Předmět: |
|
|
Přidal jsem podporu pro Macy s procesory PowerPC, které jsou narozdíl od Intelů "Big Endian". Více viz konec zeditovaného prvního příspěvku. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 3. listopad 2014, 18:29:32 Předmět: Re: Portování SDL her pro Mac OS X |
|
|
Ladis napsal: |
Floaty mi SDL_SwapLE32() převádělo blbě, tak jsem vygooglil a použil funkci FloatSwap() odtud. |
Toto mi nejde do hlavy. Nedělají ty dvě funkce to samé, jenom jinak? Rád bych to chápal... _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 3. listopad 2014, 20:39:35 Předmět: |
|
|
Chápat to nemusíš. Prostě jsem zkusil jednu, nefungovala, tak jsem vygooglil druhou. Na výkon to nemá vliv a hráč na zdroják nekouká. |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 3. listopad 2014, 22:37:05 Předmět: |
|
|
- Tatíí, proč je nebe modré?
- Funguje to, nech to bejt...
_________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 22. listopad 2014, 02:02:51 Předmět: |
|
|
Btw ten Becher Rescue zkousim ted a pada to. Nechybi v tom app bundle frameworky pro SDL, SDL_mixer apod.?
Edit: Opravdu to bude tim:
kód: |
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000008fe0105c
Crashed Thread: 0
Dyld Error Message:
Library not loaded: @executable_path/../Frameworks/SDL_mixer.framework/Versions/A/SDL_mixer
Referenced from: /Users/vojta/Desktop/Becher Rescue.app/Contents/MacOS/Becher Rescue
Reason: image not found |
_________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 22. listopad 2014, 17:45:49 Předmět: |
|
|
Fakt že jo, Becher Rescue.app\Contents\Frameworks\ je prázdné. No nikde to teď nemám nainstalované, tak smůla. |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 22. listopad 2014, 18:43:25 Předmět: |
|
|
A jeste jeden potencialni problem - soubory nacitas uplne normalne, ale ja jsem musel pouzit tuto silenost, aby to fungovalo a nacitalo spravne z toho *.app, i kdyz to nekdo prejmenuje:
kód: |
char gameDatPathCstr[1024] = {0};
#ifdef __MACOSX__
{
// http://stackoverflow.com/questions/8768217/how-can-i-find-the-path-to-a-file-in-an-application-bundle-nsbundle-using-c
// Get a reference to the main bundle
CFBundleRef mainBundle = CFBundleGetMainBundle();
// Get a reference to the file's URL
CFURLRef gameDatURL = CFBundleCopyResourceURL(mainBundle, CFSTR("game"), CFSTR("dat"), NULL);
// Convert the URL reference into a string reference
CFStringRef gameDatPath = CFURLCopyFileSystemPath(gameDatURL, kCFURLPOSIXPathStyle);
// Get the system encoding method
CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
// Convert into a C string
CFStringGetCString(gameDatPath, gameDatPathCstr, 1023, encodingMethod);
}
#else
strncpy(gameDatPathCstr, "game.dat", 1023);
#endif |
_________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
|