Wcześniej to były jedynie "głośne myśli" na Facebooku, dzisiaj to już oficjalne postanowienie: zawieszam prace nad szablonem "raylib"! Nie może to się dłużyć coraz bardziej! Obowiązki się nawarstwiają, jest już połowa lipca, a ja nawet całego szablonu nie mam skończonego, nie mówiąc już o projekcie który miał w tym roku nadejść. Po mojemu już nie zdążę niczego opublikować w tym roku. Po prostu jest już za mało czasu na kolejne pisanie...

"RAYLIB" ZAWIÓDŁ PRZY ANDROIDZIE

Sięgając wstecz do historii, kolejnym podpunktem miała być udana kompilacja pod system Android. Spodziewałem się problemów, ale żeby aż takich? To wszystko przez panującą dezinformację. Żadnych solucji od początku do końca, tylko same poszlaki. Tysiące kliknięć po forach i po artykułach. Już się nie produkuję żeby napisać, że nawet gotowy szablon pod "VSCode" też sam musiałem skorygować. Straciłem na to miesiąc i mam serdecznie dosyć! "raylib" to genialne narzędzie, ale ma stanowczo za mało rzetelnej dokumentacji!

Jeszcze wczoraj ponownie zwrócił się do mnie autor frameworka w sprawie zgłoszonego przeze mnie błędu na GitHub. Chodziło o zablokowanie się aplikacji po wciśnięciu na smartfonie przycisku "powrotu". Doszedłem do wniosku, że prawdopodobnie okno gry oraz sama aplikacja to dwa osobne procesy. W wyniku naciśnięcia przycisku powrotu, dochodziło do przerwania działania okna gry, ale aplikacja sama w sobie dalej funkcjonowała w tle. Po minucie, na ekranie pojawiał się komunikat o braku odpowiedzi przez aplikację. Sprawa ostatecznie została uznana za nierozwiązaną i tym samym, raz kolejny "raylib" dał mi powód do "podziękowania".

raylib

"raylib", mimo oficjalnej wiadomości o wsparciu platformy, nie potrafi sobie poradzić z pełni działającym eksportem na Androida.

ZMIANA NARZĘDZIA DLA KOLEJNYCH PROJEKTÓW

Co mogę innego zrobić w takiej sytuacji? Wyszedłem z założenia, że na razie przestawię się na inne narzędzie (ale już w nieco łatwiejszym języku), żeby z biegiem lat poczekać na taki framework, który nie będzie pierniczył całego eksperymentu w sytuacji eksportu na wiele platform (albo "raylib" będzie na tyle "dojrzały", że poradzi sobie z tym perfekcyjnie). To również jest mój błąd, bo mogłem w pierwszej kolejności skompilować sobie przykładowe szablony i wtedy też prawda wyszłaby na jaw.

Czy jednak będzie coś w tym roku? Nie sądzę. "raylib" dał złudne nadzieje, ja już mam dosyć tego wyścigu szczurów. Mam kolejne narzędzie na celowniku, ale tytuł zostawię dla siebie. Bo potem znowu wypadnie "coś" i powtórnie trzeba będzie zmieniać narzędzie. Nie mam już czasu na kolejną taką serię. Reszta roku to będzie dbałość o zakończenie studiów. Niedługo będę musiał szlifować angielski, potem będzie egzamin, następnie pisanie pracy dyplomowej, żeby stawić się na drugi egzamin.

Widząc, że przez najbliższe miesiące nie będę miał chwili wytchnienia, postanowiłem nie zawracać sobie tym głowy i jeszcze bardziej się frustrować i stresować. Najpierw "HaxeFlixel" nieudany, potem "raylib" dał ciała, trzeci raz już naprawdę nie zdzierżę bo wiem, że to będzie potrzebowało kolejnych miesięcy poznawania narzędzia i sklejania szablonu jednocześnie dostosowując go do nowego środowiska.


Koniec artykułu i koniec nadziei. 2020 naprawdę jest dla mnie dużo lepszym rokiem niż przeklęty poprzednik, ale w kwestii działalności, przyniósł same straty. Na razie tylko artykuły stały się w pełni zakończonym etapem w tym roku.

PODOBNE ARTYKUŁY

Znowu skoncentruję się na języku C jeśli chodzi o premierowy artykuł na mojej stronce. Na podstawie wielu spostrzeżeń w internecie zauważyłem, że wiele razy był poruszany jeden istotny temat kręcący się wokół tekstów, czyli łańcuch znaków w C. Tutaj sprawa robi się dużo bardziej mozolna niż przy dzisiejszych abstrakcyjnych rozwiązaniach operujących na łańcuchach. Dowiedzcie się jaki najczęściej popełniany błąd jest przez początkujących w języku C, a na który ja sam również wpadłem kilka razy. Chodzi o literał znakowy.

Na dzisiejszy dzień malutka dawka nowej porcji wiedzy odnośnie języka C. Analizując co już napisałem a czego jeszcze nie, postanowiłem sięgnąć wstecz do dużo prostszych zagadnień i zająć się omawianiem modyfikatora funkcji "printf" i "scanf", który jest mało znany. Modyfikator to coś innego niż specyfikator. Oznacza on możliwość wywierania wpływu na formatowanie danych wyjściowych w miejsce wprowadzonego specyfikatora, który podlega zmianie na odpowiedni parametr. Cała lista specyfikatorów znajduje się tutaj zarówno jednej funkcji, jak i drugiej, a dzisiaj poruszę wątek modyfikatora w postaci znaku gwiazdki (ang. "asterisk"), który jest na tyle wyjątkowy, że oznacza on coś zupełnie innego zarówno u jednej, jak i u drugiej funkcji. Zweryfikujcie ponownie swoje twierdzenie czy rzeczywiście znacie już wszystkie modyfikatory.

Dawno nie było żadnego artykułu na temat samego programowania więc macie ode mnie kolejny wpis dotyczący tym razem prostej rzeczy, którą można wykonać na kilka sposobów zarówno klasycznie, jak i wyjątkowo. Chodzi mi o często spotykany manewr jakim jest zamiana wartości dwóch zmiennych. Zdecydowana większość posługuje się metodą polegającą na użyciu zmiennej tymczasowej (pomocniczej) do tymczasowego przechowania jednej z dwóch liczb tuż przed operacją zamiany. To jak najbardziej logiczne podejście, bo podczas zamiany trzeba gdzieś przechować na chwilę jedną z dwóch wartości. Czy rzeczywiście to jest konieczne?

Artykuł jako wydanie specjalne!!! "Minifield" w dniu dzisiejszym przekroczył trzy lata od daty wydania. Podchodzę do niego wyjątkowo z powodu najwyższych notowań tego projektu, zatem trzeba było to jakoś "uczcić". W prezencie macie artykuł i następną nowinę ode mnie: będzie następna część tej retro platformówki!!! Teraz nie będę miał wyjścia i muszę przedstawić całą resztę planów dotyczących wypuszczania projektów.

"raylib" musiał na moment zejść na boczny tor ze względu na brak istotnych "popchnięć" w kierunku kompilacji dla Androida. W związku z tym, mimo jednodniowego spóźnienia, postanowiłem ukazać Wam w końcu pierwszy program nad którym pracuję od 1 czerwca. Pierwszy program w Java, który będzie oficjalnie widniał na stronie Jasona. Zobaczcie pierwszy zrzut ekranu ukazujący własny generator tabeli doświadczenia dla gier RPG!!!

Oto kolejny artykuł na temat szablonu we frameworku "raylib". Mija pierwsza połowa czerwca, a w chwili obecnej jestem na czwartym etapie polegającym na poszerzeniu sterowania o klawiaturę i ekran dotykowy. Jakie obecne są efekty? Zapraszam do czytania!

Przyszedł czerwiec, kończy się rok akademicki, a praca ciągle nie daje spokoju. Tak było cztery miesiące temu, trzy miesiące temu, dwa miesiące temu i w maju. Tak jest w chwili obecnej. Szablon w "raylib" ciągle wymaga wielu godzin badań i wysiłków, żeby wyrównać to do poziomu zerowego, bo to będzie jedynie szkielet dla następnych gier którymi nie mogę zająć się do tej pory. Nie jest już tak najgorzej. Ostatnie dni prac nad trybem pełnoekranowym i skalowalnym renderowaniem spowodowały pewien awans możliwości szablonu i powoli kształtuje się to na aplikację desktopową. Interesuje Was dalszy ciag?

Zaciekawieni obecnym postępem nad tym samym? Etap drugi mam już cały za sobą. Co to oznacza w praktyce oprócz przejścia do następnego? Zajmowanie się poprawkami, ale przede wszystkim, wsparciem sterowania dla kilku urządzeń, czyli klawiatura i dotyk. "raylib" jeszcze przez wiele długich dni będzie przeze mnie otwierany, a ja dopiero w czerwcu będę przechodził do sprawy przenoszenia aplikacji na wyższy poziom. Detale zostawiam w środku.

Przyszedł czas na definitywne podsumowanie efektywności pisania artykułów. Najpierw najważniejsza wiadomość: opłaciła się ta harówka! Z całą stanowczością. Wyświetlenia skoczyły do góry, parę subskrypcji również. Facebook też się odezwał i powiadomił o dodatkowych zainteresowanych, zatem jestem bliżej niż dalej! Artykuły, tak jak sądziłem, są w postaci fundamentów na których położyłem wszystko to, co istnieje już znacznie dłużej. Ponieważ ich nie było, miałem jedynie sam "dach", który był praktycznie niezauważalny. Sięgajcie do środka w celu ujrzenia dokładnych badań i analiz.

Minęło już sporo czasu więc postanowiłem napisać Wam o postępach nad (zbyt) długo oczekiwanym szablonem i nad (zbyt) długo oczekiwaną grą, która miała nadejść miesiąc temu. W języku C idzie mi już znacznie lepiej, "raylib" jak był wcześniej genialny, tak jest do teraz (zwłaszcza jak wyszedł update 3.0), zatem jakoś idzie. Tylko jak konkretnie? Czy są jakieś z mojej strony spekulacje odnośnie daty wydania? Zapraszam!

Udało się! Tak skonany osiągnąłem wyznaczony przez siebie próg i piszę do Was po raz ostatni dzień po dniu. Jason ma na swojej stronie 250 artykułów!!! Nadszedł czas, aby porządnie odpocząć od ich ciągłego pisania. Nie znaczy to oczywiście, że usiądę sobie na tyłku czekając do końca roku na gwiazdkę z nieba. Zapraszam do artykułu w sprawie szczegółów.

Poznamy teraz kolejny zapis dający wygodę przy wywoływaniu konkretnej funkcji danego obiektu dla każdej instancji przebywającej w kolekcji. Gdzie tam zwykła pętla "for" czy nawet pętla rozszerzona. Nawet wyrażenie lambda ukazane całkiem niedawno można jeszcze bardziej skrócić. Niech Wam posłuży referencja do metody!

Myślę, że na ostatnim wątku zakończymy temat biblioteki "Swing" i zerkniemy znowu na obsługę wyjątków. To nie będzie kolejna pogadanka o wyjątkach, a tylko o pewnej metodzie wykorzystywanej nałogowo przez wiele osób w programach, filmach czy poradnikach. Widzicie to tyle razy. Za każdym razem gdy ktoś na szybko pisze "try-catch", zwykle osadza to samo wyrażenie po nazwie instancji klasy "Exception". Bez przerwy w przeważającej większości przypadków ludzie zalecą Wam to samo. W książkach wielkimi wołami również jest o tym wspomnienie, a jednak można nie zdawać sobie sprawy co ta metoda robi takiego ekscytującego, że wszyscy to stosują. "printStackTrace". Co to takiego? Zapraszam do środka.

Druga część o metodzie "paintComponent". Na zakończenie dzisiejszej porcji wiedzy, postanowiłem powrócić do tego samego tematu omawianego wcześniej jednak przybliżę Wam teraz możliwości biblioteki "Swing" i klasy "JPanel" prezentując więcej funkcji rysujących. Konstrukcję podstawową już znacie, zatem nie muszę już dzielić tych tematów na dwie części. Pokażę Wam jak przy pomocy rzutowania instancji typu "Graphics" na "Graphics2D", możecie sobie poszerzyć pole manewrów!

Wznawiam temat serializacji danych w języku Java (radzę zobaczyć poprzednią część jeśli nie wiecie o czym mowa). Wyobraźmy sobie taką sytuację. Mamy naszą klasę, implementujemy interfejs "Serializable" i każemy programowi zapisać wszystkie dane składowe...oprócz jednej! Takiej małej zmiennej, która powinna być pomijana ze względu na wartość unikalną dla konkretnego uruchomienia aplikacji. O Boże! Czy to znaczy, że z powodu takiej błahostki, serializacja obiektów idzie w drzazgi i trzeba od razu przerzucać cały system przechowywania do pliku tekstowego? Niekoniecznie! Twórcy języka i o takiej sytuacji pomyśleli więc mogę ją teraz zaprezentować. Poznajcie kolejne słowo kluczowe związane z wykluczaniem danych składowych do zapisu, "transient"!

Odczepimy się od technicznych rzeczy, a zajmiemy się artystycznymi. Być może nie wiecie, że "Swing" oferuje również komponent klasy "JPanel", który może posłużyć Wam do rysowania dowolnych kształtów geometrycznych na ekranie. Czy to linia, czy to kółko, okrąg, prostokąt, obrazek pobrany z pliku. Dzięki poznaniu metody "paintComponent", to wszystko staje się możliwe! Trzeba jednak obchodzić się z nią inaczej niż przy całej reszcie innych funkcji. Dalszy ciąg zostawiam w środku.

Idziemy dalej z biblioteką "Swing" i językiem Java! Podczas omawiania poprzednich tematów padło już wielokrotnie hasło "BorderLayout". I jak zdążyłem wspomnieć, jest to jeden z "układów" dla rozmieszczania mniejszych komponentów na "ramce" o nazwie "JFrame". Ale co to jest "układ"? Co to jest "BorderLayout"? I jakie mogą być jeszcze inne układy jeśli twierdzę, że ten przytoczony to tylko jeden z nich? Niech zawartość artykułu rozwieje te wątpliwości raz na zawsze!

Ponownie zmierzamy w stronę dylematu "podpinania" zdarzeń do przycisków w Javie przy pomocy biblioteki "Swing". Mamy klasy wewnętrzne, a teraz wyrażenie lambda przybliży nas do celu. Gdy zobaczycie jak je zastosować do przycisku, nie będę musiał się nawet pytać która z metod wydaje się Wam przyjemniejsza. Bez ceregieli. Obsługa zdarzeń za pomocą wyrażenia lambda!

Przystępujemy do następnego artykułu po zapowiedzianej dłuższej przerwie. Przyznajcie szczerze, niezbyt piękny był ten zapis z klasami, prawda? Tak trzeba było pisać zanim pojawiła się Java 8. OK, teraz przystąpimy do bardziej nowoczesnego sformułowania. Ono istnieje już od sześciu lat więc o nim też mogliście już nieraz usłyszeć. Przedstawiam Państwu "wyrażenie lambda" (ang. "lambda expression")!