Pokazywanie postów oznaczonych etykietą AS3. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą AS3. Pokaż wszystkie posty

20 czerwca 2011

Preconditions

Aby tworzyć bardziej bezpieczny kod można stosować programowanie kontraktowe. Jest to sposób organizowania kodu, który głównie polega na tym, aby przed wykonaniem operacji i po wykonaniu operacji sprawdzić status aplikacji. Mowa tu o wczesnym wykryciu potencjalnego źródła błędu.


Do implementacji kontraktów stosuje się asercje( ta strona przedstawa to od strony języka C) i wyjątki.

Jednak stosowanie wyjątków do tego celu jest nieco żmudne, bo dla każdego postawionego warunku trzeba rzucać osobny wyjątek. Z resztą taki kod nie czyta się najlepiej.

W bibliotekach guava od google można znaleźć ciekawe rozwiązanie dla tej sytuacji. Mowa o preconditions.

Implementacja tego rozwiązania jest bardzo prosta, bo z reguły opiera się na opakowaniu rzutu wyjątkiem przez statyczną funkcję. Poniższy kod przedstawia moje rozwiązanie w wersji dla AS3.

Sposób na enum

Typy wyliczeniowe są znane od wielu lat, a mimo to AS3 ich nie oferuje. To dziwne, bo gramatyka tego języka wspiera wiele nowoczesnych konstrukcji, a w tym przypadku lipa. Szkoda.


Poniższy kod przedstawia moje obejście tej niedogodności.

19 czerwca 2011

Implementacja wzorca singleton w AS3

Niniejsza notka skierowana jest do osób, które znają podstawowe wzorce projektowe. Jeśli nigdy o tym nie słyszałeś to wiedz, że to są sprawdzone techniki programowania, które sprawiają, że tworzony projekt jest bardziej elastyczny. Co w szczególności sprawia, że kod aplikacji jest lepiej przygotowany do zmian.

Wzorzec singletona w przypadku AS3 jest bardziej zawiły niż w językach takich jak C++, Java czy C#. Wszystko dlatego, bo tu nie ma możliwości na zdefiniowanie prywatnego konstruktora.

Aby obejść tę niedogodność można wymusić na konstruktorze publicznym odbieranie wygenerowanego klucza, który zna tylko statyczna metoda instance. Gdyby user podał fałszywy klucz wtedy konstruktor zgłosiłby wyjątek. Zatem user staje się zależny od metody instance, która za niego pilnuje, aby w projekcie istniała tylko jedna instancja danej klasy.

Sądzę, że powyższy opis stanie się bardziej jasny, gdy przekonasz się jak wygląda kod.

18 maja 2011

Animacja

Spora liczba początkujących programistów C++ stawiając swe pierwsze kroczki w dziedzinie gier 2D używa biblioteki Allegro. Co sprawia, że wykonanie animacji sprowadza się do wczytania kilku obrazków, które będą co jakiś krótki czas zmieniane. Tak jak w filmach.



Od strony kodu w C++ sprawa nie wygląda najlepiej, bo to programista musi zbudować, bądź zdobyć klasę animacji, a następnie podczas tworzenia gry, musi żywcem w kodzie opisywać parametry na temat tworzonej animacji. Oczywiście da się zrobić w ten sposób grę, ale to niewątpliwie jest uciążliwe. 

Z resztą spójrz na ten artykuł: http://cpp0x.pl/kursy/Kurs-Allegro-C++/Animacja/71

W przypadku aplikacji Flash, sprawa ma się zdecydowanie lepiej. Otóż animacje tworzy się w specjalnych edytorach, a wynik pracy zapisuje się jako plik SWF, który sam w sobie dysponuje wszystkimi informacjami na temat utworzonej animacji. Tego typu rozwiązanie ma w sobie kilka zalet:
  • Kod jest lepszy, bo nie zawiera zbędnych informacji
  • Łatwiej i lepiej tworzy się animacje w edytorze Flasha
  • Animacje możesz modyfikować, bez modyfikowania kodu
Aby tworzyć animacje jak wspomniałem potrzebny jest edytor Flasha. Na rynku jest wiele produktów oczywiście na ich czele są produkty Adobe, jednak ich cena może być szokująca :-) W chwili obecnej cena ta za Adobe Flash Pro CS5 wynosi ponad 3 tysiące złotych. Dlatego początkującym polecałbym korzystanie z wersji Trial bądź z innych programów, które są darmowe.

Tworzenie animacji wymaga pewnej wprawy, ja sam jestem początkującym i w chwili obecnej co najwyżej mogę się poszczycić latającą chmurką. Nie będę tutaj rozpisywał się w jaki sposób tworzyć animacje, bo to najlepiej to zobaczyć na youtube.

Aby móc użyć gotową animację w AS3 wystarczy użyć kodu z wątku Wyświetlenie Obrazu i zamiast nazwy grafiki podać nazwę animacji.