Wpisy dotyczące mojego projektu – Kingdoms Clash.NET
Chyba jednak z planu regularnego pisania nici, ale cóż…
Wydaje mi się, że jednym z ciekawszych miejsc w grze jest obsługa wielu trybów rozgrywki. Miałem niezłą zagwozdkę jak to ładnie i elastycznie zorganizować. Do aktualnego stanu dochodziłem dość długo, lecz pierwszą implementację, bardzo podobną do tej, mam już od dawna. Wydaje mi się, że nie wyszło mi to najgorzej, acz chwilowo nie bardzo mogę powiedzieć, czy tak rzeczywiście jest – na razie zaimplementowany jest tylko „klasyczny” model rozgrywki. Czytaj dalej…
Jakiś czas temu poruszałem temat poruszania się jednostek. Z braku pomysłu rozwiązałem to najprostszą działającą metodą – bezpośrednią zmianą pozycji jednostki. Oprócz tego, że działało nie miało zalet. Od tego czasu upłynęło trochę wody w Wiśle jak i gra się „ciut” rozwinęła. Któregoś pięknego dnia postanowiłem się za to zabrać i ponownie podszedłem do problemu. Teraz już nie próbowałem pisać prototypu w grze, lecz od razu zaopatrzyłem się w XNA Game Studio(tym razem wersję 4.0) i Testbed. Czytaj dalej…
Tak, udało się. Zebrałem się w końcu by napisać co nieco o moich bojach z GUI. Założenia były proste: jak najmniej kodu do napisania, a samo GUI miało być wydajne i proste w użyciu. Przez ponad 2 miesiące zmieniła mi się koncepcja, jak to ma wyglądać. Czy na dobre – nie wiem. Chwilowo wszystko wskazuje na to, że projektowanie poszło w dobrym kierunku(wydajność – niekoniecznie).
Ale zacznijmy od początku…
Jak zauważyłem na początku, głównym czynnikiem rozpoczęcia prac nad Kingdoms Clash.NET był konkurs organizowany przez Maćka Aniserowicza – Daj się poznać. Już na wstępie chciałbym mu bardzo gorąco podziękować – gdyby nie on, prawdopodobnie nie doszedł bym do tego miejsca. Gdy tylko będę miał okazję, postawię Ci, drogi Macieju, pi… sok!
Konkurs „zakończył się” 15 listopada br. Mogę powiedzieć, że udało mi się wykonać w 100% to, co przez ten czas chciałem wykonać. Najważniejszym z moich celów było wytrwanie i pisanie 2 postów tygodniowo(przez 10 tygodni). Cała ich lista dostępna jest w kategorii, jak nietrudno się domyślić, Kingdoms Clash.NET
Drugim z głównych celów było wypuszczenie wersji 0.1 po 10 tygodniach pracy. To też mi się udało i jestem z tego niezmiernie dumny
Co prawda brakuje jeszcze dużej części funkcjonalności, ale mam już solidne podstawy, więc mam nadzieję, że uda mi się zaimplementować wszystko co zamierzałem na początku(a jeszcze trochę tego jest).
Znalazł się w szczęśliwej 22, która wytrwała te 10 tygodni. Chciałbym pogratulować wszystkim, którym się to udało – wiem(mimo iż nie mam wielkiego stażu), jak trudno jest wytrwać nad jednym projektem. Jestem też niezmiernie rad, gdyż mój projekt, obok 16 innych, przeszedł do kolejnego, drugiego, etapu głosowania. Chciałbym również podziękować wszystkim tym, którzy w pierwszym etapie oddali na mnie głos – mam nadzieję, że mój blog choć trochę się przydał/przyda(bo zamierzam go dalej prowadzić
).
W drugim etapie – publicznym, mogą głosować wszyscy. Tak więc, jeśli mój blog Ci się do czegoś przydał i chciałbyś lub chciałabyś oddać na mnie głos, nic nie stoi na przeszkodzie*. Pozwolę sobie przekopiować zasady głosowania ze strony Maćka:
- w przeciągu kolejnych 7 dni wejdź na stronę http://dajsiepoznac.devmedia.pl/ (w razie niesłabnącego zainteresowania termin ten może ulec nieznacznemu wydłużeniu)
- kliknij link „Głosowanie – Etap II”
- z trzech list wybierz projekty, które Twoim zdaniem zasługują na największe wyróżnienie
- do rozdania masz 6 punków: 3 za pierwsze miejsce, 2 za drugie i 1 za trzecie
- obsadzenie dwóch pierwszych miejsc jest obowiązkowe; trzecie miejsce można zostawić puste
- pod każdą z pozycji należy podać link do najbardziej wartościowego wg Ciebie posta z bloga, na który oddajesz głos (pokaż za co cenisz dany projekt!)
- na podany adres email zostanie wysłana wiadomość z linkiem aktywującym głos – odbierz maila i kliknij (jeśli wiadomość nie dojdzie w ciągu kilku godzin – sprawdź SPAM, jeśli i tam jej nie ma – zgłoś się do mnie)
- każdy może zagłosować tylko raz
Zachęcam również do zapoznania się z wszystkimi projektami, na które można głosować(ich lista dostępna jest tutaj) jak i w ogóle ze wszystkimi projektami biorącymi udział w konkursie – można dowiedzieć się wielu ciekawych rzeczy
* – a miałem nie reklamować się aż tak bardzo… to jest silniejsze ode mnie
Ostatnimi dniami bardzo dużo siedziałem nad GUI. Postanowiłem, że i jego serializację napiszę(niech żyje data driven development!). Nie zaszkodzi mi. Tak więc usiadłem do pisania. Na pierwszy ogień poszła serializacja tylko kilku kontrolek, coby się nie przemęczać. Szybko skleciłem jakiś prototyp. Działa. Tylko… Jak to wszystko połączyć w jedną, spójną całość, by np. nie trzeba było dodatkowej obsługi „zdarzeń”? Miałem wielki problem, co z tym fantem zrobić. Całe szczęście kiedyś, dawno temu, bawiłem się chwilę WPF i Silverlight, które to do budowania UI używa XAML-a. A on przecież to wszystko(a nawet więcej) ma! Czytaj dalej…
Ostatnimi czasy produkcja gry jest jeszcze mniej dynamiczna, niż to było wcześniej. Niestety, to spowolnienie będzie dłuższe niż myślałem, ale w końcu wszystko wróci do normy
Coraz bardziej doskwierała mi mnogość przestrzeni nazw w silniku. Były one często bardzo małe – jedna, dwie klasy + kilka wyliczeń to maks. Takie rozwiązanie, mimo iż bardzo złe nie jest, dobre też nie. Postanowiłem dziś zabrać się za uporządkowanie i złożenie wszystkiego w logiczną całość.
Na pierwszy ogień poszło oddzielenie modułu głównego od graficznego. Wszystko(z wyłączeniem IRenderableComponent i ich kolekcji), co miało jakikolwiek związek z grafiką przeniosłem do przestrzeni nazw Graphics i tam to sensownie(przynajmniej tak mi się wydaje) porozdzielałem.
Pozbyłem się również bezsensownych jedno- lub dwuklasowych przestrzeni nazw. ResourcesManager, ScreensManager i PhysicsManager poszły w niepamięć. Zostały scalone i dołączone do głównej przestrzeni nazw silnika. Tak samo komponenty, które nie są związane bezpośrednio z grafiką, zostały umieszczone w jednej przestrzeni nazw – Components.
Ostatnio zająłem się GUI(o czym w następnym odcinku) i brak renderera dał o sobie znać. Zostałem prawie, że zmuszony, do tego by go napisać. Po kilku chwilach przeglądania, jak jest zbudowane XNA(kilka pomysłów jest żywcem wziętych od niej) skodziłem prototyp. Jest naprawdę minimalistyczny, ale o to mi chodziło – ma tylko unifikować rendering i umożliwiać ewentualnie w miarę łatwo przejść na inny sposób wyświetlania.
Od moich pierwszych bojów z OpenTK minęło już trochę czasu. Mogę powiedzieć, że wiem, jak się nim posługiwać. Na początku biblioteka ta wydawała mi się idealna, niestety, wraz z nabywaniem doświadczenia odkrywałem coraz to różniejsze niedoróbki. Jedną z najbardziej denerwujących i najbardziej zignorowanych przeze mnie była obsługa wejścia. OpenTK udostępnia nam szereg klas, by, z założenia, móc wygodnie pobierać informacje od użytkownika. Niestety, tylko z założenia.
Patrząc z perspektywy (krótkiego) czasu, najwięcej go spędziłem nad dopracowaniem obsługi kolizji. Jak nie trudno się domyśleć, są one oparte na zdarzeniach, tzn., gdy jakaś kolizja zajdzie(np. jednostka <-> teren, jednostka <-> jednostka) wysyłane jest przez bibliotekę zdarzenie. Rozwiązanie nie jest może idealne, ale nie widzę za bardzo innego rozwiązania. I nie bardzo mam wyjście stosować inne
Czytaj dalej…
Minęło 10 tygodni, odkąd zacząłem pisać Kingdoms Clash.NET(krótki opis). Czy były to tygodnie owocne? Na pewno. Na początku zastanawiałem się, czy uda mi się ukończyć przez ten czas grywalną wersję. Teraz mogę z czystym sumieniem powiedzieć, że mi się udało. Przedstawiam wam wersję 0.1 Kingdoms Clash.NET! Czytaj dalej…
W poprzednim odcinku skupiłem się raczej na grze(i jak ją można ulepszyć) niż na, jak tytuł wskazywał, serializacji. Tak szczerze powiedziawszy to o grze samej w sobie jest bardzo mało wpisów, więcej jest o tym, czego użyłem, początkach z bibliotekami czy bojami z silnikiem. Przyznam, że nie wiem, czym to jest do końca spowodowane, możliwe, że gra jest od strony technicznej mało ciekawa
Na początku miałem zamiar opisać wszystkie znane mi sposoby na to, lecz po przemyśleniach stwierdziłem, że jest to bez sensu. W Internecie jest już tyle tekstów na ten temat(np. MSDN), że nie ma potrzeby, bym powielał to, co już jest. Opiszę natomiast to, czego ja użyłem i dlaczego akurat tego. Czytaj dalej…