< > wszystkie blogi

salival's absurdlog

Potwornie absurdalny blog

Owca w labiryncie...

18 maja 2008
Naprawdę ostatnio wciągnąłem się w XNA i pisanie dla Xbox360. Dziś krótko będzię. Postanowiłem wpuścić owcę w labirynt...
Dla szybkiego testu postanowiłem zbudować prosty silnik rysujący mapę 2D - labirynt, oraz postać sterowaną przez gracza. Co testowałem? Tym razem tzw. Custom Data Importer czyli wbudowany w XNA silnik pozwalający importować i przetwarzać dowolne typy danych. W ten sposób możemy stworzyć sobie jedna bibliotekę, która będzie odpowiedzialna za ładowanie konkretnego typu danych ( w tym przypadku mapy poziomu ) i pozwoli załadować plik przez tzw. ContnetManager bezpośrednio rzutując rezultat metody Load() na konkretny obiekt. Skoro możemy załadować w ten sposób grafikę, obiekty 3D, fonty, to czemu nie dowolny inny typ danych? Ciekawą sprawą jest, że importery działają z dwóch stron, tzn. po stronie kompilacji oraz w czasie działania aplikacji. Jest to coś, o czym MS zapomniał wspomnieć w dokumentacji ( lub po prostu to przeoczyłem ). Sporo więc czasu straciłem na "odkrywaniu" jak to działa, ale w końcu udało się. Po prostu plik źródłowy ( czy to mapa, czy to jpg czy też inny importowany resource ) jest przetwarzany na poziomie procesu kompilacji i do aplikacji trafia jako binarka, która jest "rozumiana" przez ContentManager. Jednym słowem biblioteka importera jest używana w czasie kompilacji oraz kopiowana jest jako część aplikacji. Jest to moim zdaniem bardzo ciekawe rozwiązanie w kwestii zagadnienia jakim jest napisanie dobrego ResManager'a. Właściwie jedno z najlepszych jakie widziałem. Ale nic to, mapa labiryntu została zapisana bardzo prosto, jako kod ASCII: Importer pliku .lev ( takie nadałem mu rozszerzenie ) po prostu zamienia kody ascii na formę binarną oraz zapisuje nagłówek dotyczący wielkości mapy. Nic wielkiego, jak na razie ;) Efektem tego była pierwotna wersja 2D: Silnik rysowania levelu też jest prosty, dla każdego elementu ściany przeszukuje sąsiadów i w ten sposób ustala maskę dla tile'a, który ma być narysowany - czyli tak jak to się od wieków w tego typu grach robi - tu raczej wiele wymyślić się już nie da :) A to niebieskie to owca ;) Dalsze zabawy rzuciły mnie w 3D. W końcu jesteśmy w erze konsol next-gen :D Postanowiłem wykorzystać importer i parser do zaimportowanych danych, tak by to samo przedstawić w projekcji 3D, i tak powstał poniższy filmik. Tym razem zrezygnowałem z filmowania TV i po upewnieniu się, że aplikacja działa tak samo na Xbox360 jak i na PC po prostu zgrabowałem rezultat PC. http://youtube.com/watch?v=lO8mpaVEkUE Troszke problemów ze sterowaniem się pojawiło ( po obróceniu planszy całkowicie traci się orientacje ;) ). Ale generalnie nie o to chodziło. Z czystego lenistwa, każdy element mapy stanowi obiekt 3D, jednak większość ( poza owcą ) mogłaby być wygenerowana w czasie rzeczywistym, czemu tez mój następny test ma służyć ;) A teraz zastanawiam się, jak tu się zebrać by to samo po angielsku napisać na moim podobno oficjalnym blogu developerskim :C
 

Dobra, dobra. Chwila. Chcesz sobie skomentować lub ocenić komentujących?

Zaloguj się lub zarejestruj jako nieustraszony bojownik walczący z powagą

Napędzana humorem dzięki Joe Monsterowi