Skocz do zawartości

Tworzenie gier na ESP32 z TFT_eSPI - kilka pytań


Kiko

Pomocna odpowiedź

Fajna robota! 🙂 I dobrze zadane pytania.

Co do "wielowątkowości" to ja tu raczej nie widzę "wielu wątków". Tylko i aż trzeba:
- aktualizować pozycje obiektów na ekranie,
- odczytywać stan przycisków.

Ogólnie w najprostszym podejściu można to całkiem efektywnie zrobić w jednej pętli, za pomocą jednego "timera", wykorzystując ten "timer" do tego, żeby "budzić" pętlę z "uśpienia" (np. co 20ms czyli 50 razy na sekundę) i po "obudzeniu" wykonywać w/w czynności. Owszem wymaga to opisania i przechowania w zmiennych w programie aktualnego stanu gry (tak naprawdę potrzebna jest tu prosta maszyna stanów). Celowo napisałem "timer" w cudzysłowie, bo zazwyczaj nie potrzeba nic więcej niż wywoływanie w pętli głównej funkcji w stylu sleepdelay itp.  

  • Lubię! 2
Link do komentarza
Share on other sites

- dodać joystick, obudowę i program napisać w esp-idf to tak w przyszłości.

https://github.com/cfrankb/esp-idf-cs3/tree/master

 

Link do komentarza
Share on other sites

53 minuty temu, 99teki napisał:

- dodać joystick, obudowę i program napisać w esp-idf to tak w przyszłości.

https://github.com/cfrankb/esp-idf-cs3/tree/master

 

No nie takiej odpowiedzi oczekiwałem. Miałem nadzieję że moje pytania rozpętają tu istną burzę mózgów...

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A jakiej? Jak chcesz coś większego napisać na ESP32 to bez FreeRTOS-a możesz ledami migać. Nie znam biblioteki z której korzystasz, ale zamiast męczyć proca pngami lepiej skompresować to w rle. 

Ot, i tyle burzy.

Link do komentarza
Share on other sites

19 minut temu, ethanak napisał:

A jakiej? Jak chcesz coś większego napisać na ESP32 to bez FreeRTOS-a możesz ledami migać. Nie znam biblioteki z której korzystasz, ale zamiast męczyć proca pngami lepiej skompresować to w rle. 

Ot, i tyle burzy.

Może właśnie takiej...  - czyli do ogarnięcia FreeRTOS i np. https://github.com/MHotchin/RLEBitmap ?

Link do komentarza
Share on other sites

Nie jestem pewien czy do tak prostej gierki jest konieczny RTOS, powiedziałbym że to więcej kłopotu dla początkującego niż korzyści z jego zastosowania. Kolega @MR1979 udowadnia to w swoim projekcie, o ile pamiętam ten projekt nie korzysta RTOSa

 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Projekt, nad którym pracuję - to prosta gra zręcznościowa - postać - jajko, bohater gier Dizzy - przeskakuje z platformy na platformę, które przemieszczają się w trzech rzędach z różnymi szybkościami. Przystanek na platformie będzie powodował powolną jej destrukcję, co będzie skutkować upadkiem - zatem gracz będzie miał niewiele czasu na podjęcie decyzji na którą platformę skoczyć. Utrudnieniem będą różne szybkości poszczególnych platform. Każda platforma, na którą wskoczy Dizzy to punkt. Takie z grubsza założenie. Sama postać w stanie spoczynku ma machać rączkami i mrugać oczami co jakiś czas. Ktoś, kto widział grę Dizzy na komputerach ZX Spectrum zapewne wie, jak postać się poruszała. Chciałbym w miarę dokładnie odwzorować te ruchy. Póki co pracuję nad animacją postaci - ale nie mogę się zdecydować co wybrać, jeśli chodzi o wyświetlenie animowanej postaci. Bazuję na TFT_eSPI.h - w necie są różne rozwiązania wyświetlenia bitmapy, png, jpg, animacji poklatkowej z gifa itp. np. 

 

capture_07022024_194735.thumb.jpg.514c1747138802a8b14ddcffb803a036.jpg

  • Lubię! 2
Link do komentarza
Share on other sites

19 godzin temu, _LM_ napisał:

Nie jestem pewien czy do tak prostej gierki jest konieczny RTOS, powiedziałbym że to więcej kłopotu dla początkującego niż korzyści z jego zastosowania. Kolega @MR1979 udowadnia to w swoim projekcie, o ile pamiętam ten projekt nie korzysta RTOS

Potwierdzam, nie korzystam 🙂

18 godzin temu, ethanak napisał:

No ale fajnie by było dwa rdzenie wykorzystać...

Wykorzystuję dwa rdzenie. Przy czym drugi jest oddelegowany tylko i wyłącznie do obsługi dźwięku.

Dnia 2.07.2024 o 13:28, Kiko napisał:

Pytanie pierwsze - czy taki sposób wyświetlania jak i zapisywania danych bitmap jest "dobry" - tzn. to, że działa nie oznacza, że jest zgodny ze sztuką - nie wiem, dlatego pytam. 

Jeżeli tylko nie ogranicza cię pamięć to staraj się trzymać grafikę w nieskompresowanym formacie zgodnym z twoim trybem wyświetlania. Jeżeli pamięć jest problemem to tak jak @ethanak zaproponował to kompresja RLE jest dobrym rozwiązaniem.

Inną metodą kompresji danych jest stosowanie palety kolorów. Czyli definiujesz tablicę z np 256 kolorami (np po trzy bajty każdy), a w samej grafice odwołujesz się tylko do tej tablicy.

Te dwie powyższe metody kompresji można oczywiście łączyć.

Przezroczystość możesz rozwiązać dodając pojedynczy bit danych do grafiki, albo przyjąć że jakiś konkretny kolor jest przezroczysty. Albo możesz też isć na całość i dać pełny kanał Alpha (cały bajt), i wtedy obsługujesz płynne przenikanie pomiędzy bitmapami.

Polecam napisać sobie w Pythonie własne narzędzia do konwersji grafiki do interesującego cię formatu.

Dla gry typu Dizzy zastosował bym właśnie rozwiązanie z tablicą kolorów (255 kolorów + 1 przezroczysty).

Pozdrawiam,
Marek

Edytowano przez MR1979
  • Lubię! 1
Link do komentarza
Share on other sites

34 minuty temu, MR1979 napisał:

Wykorzystuję dwa rdzenie. Przy czym drugi jest oddelegowany tylko i wyłącznie do obsługi dźwięku.

Tyle że piszesz na STM-a, a kolega na ESP32. A tu FreeRTOS jest czymś natywnym i próby wynalezienia kolejnego koła czy stosowanie kruczków rodem z AVR-ów nie ma większego sensu. A nawet żeby coś odpalić na drugim rdzeniu musisz użyć funkcji FreeRTOS-a (xTaskCreatePinnedToCore).

37 minut temu, MR1979 napisał:

Jeżeli pamięć jest problemem to tak jak @ethanak zaproponował to kompresja RLE jest dobrym rozwiązaniem.

Nie tylko pamięć. Dekompresia RLE jest trywialna i bardzo szybka, czego nie można powiedzieć o PNG. A w wielu przypadkach można robić dekompresję bezpośrednio do okna wyświetlacza.

 

Link do komentarza
Share on other sites

@Kiko Super projekty. Przeglądnąłem również Twojego YT. Jestem pod wrażeniem, masz nowego subskrybenta.

Świetna robota, dla mnie to umiejętności kosmos, ale ja się nie znam. Dzięki, że jesteś na Forbocie. Może się od Ciebie coś fajnego nauczę, albo natchniesz na jakiś gadżet na zimowy czas.

Brawo.

  • Lubię! 1
Link do komentarza
Share on other sites

42 minuty temu, SOYER napisał:

@Kiko Super projekty. Przeglądnąłem również Twojego YT. Jestem pod wrażeniem, masz nowego subskrybenta.

Świetna robota, dla mnie to umiejętności kosmos, ale ja się nie znam. Dzięki, że jesteś na Forbocie. Może się od Ciebie coś fajnego nauczę, albo natchniesz na jakiś gadżet na zimowy czas.

Brawo.

Chyba jednak kliknąłeś na film o tworzeniu animacji z plików gif - a to nie mój kanał 😉 Podałem tylko przykład w jaki sposób można wyświetlić proste animacje. Mój kanał jest baaaardzo skromny.

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.