atarionline.pl Poklatkowa animacja fragmentu ekranu, MP - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthortonual
      • CommentTime30 Aug 2025 18:05
       
      Szanowni,

      mam pytanie odnośnie animacji w trybie graficznym 160×96, 4 kolory. Chcę, żeby mały fragment ekranu – prostokąt – był zamieniany w czasie, tworząc iluzję animacji, np. 3–4 klatki.

      Fragment animowany to prostokąt w danej pozycji i o danym rozmiarze powiedzmy 20x20 pikseli. Pomysł jest taki, żeby kilka prostokątnych klatek animacji nakładać na główny obraz i zamieniać je w pętli z pewnym opóźnieniem.

      Zależy mi na rozwiązaniu prostym w implementacji i chciałbym zrobić to w Mad Pascal'u.

      Rozważam wariant, gdzie mam jeden obraz 190×96 pikseli, z czego główny obraz zajmuje tylko 170×96, a reszta przechowuje klatki animacji. Pokazuję tylko główną część obrazu poprzez crop a klatki nakładam/podmieniam w pętli. Wystarczy, jeśli czas między klatami będzie nawet ~300ms.

      Czy taki sposób jest właściwy i optymalny? Czy może lepiej zastosować inne rozwiązanie, może już istniejące?

      Dzięki za wszelkie wskazania.
      • 2:
         
        CommentAuthorMq
      • CommentTime30 Aug 2025 19:19
       
      Tak właśnie robi się wszystko na Atari. Np. gry. Animujesz mały fragment ekranu i masz ludzika, przeszkadzajkę, ogień, węża, czy tam rakietę. Pytanie jak to zrobić jest zbyt ogólne. W Mad Pascalu masz przykłady gier. Skorzystaj z któregokolwiek. A najpierw poznaj tryby graficzne i znakowe, rozważ SAMODZIELNIE wady i zalety każdego z nich, zrób testy wyświetlania i SAMODZIELNIE sprawdź który tryb Ci odpowiada i który da radę wyświetlić to czego oczekujesz. Zgłęb też tematykę "ramki" i przerwań, żeby podmieniać bajty w odpowiednich momentach, kiedy nie jest wyświetlany obraz. Słowem długa droga przed Tobą, ale jakże przyjemna:-)
      • 3: CommentAuthorvega1
      • CommentTime30 Aug 2025 23:52
       
      jeżeli coś małego rysujesz to można się wyrobić w czasie kiedy nie jest rysowany ekran...ale jak coś dużego to najlepiej mieć 2 ekrany...rysujesz na tym, którego nie widać i jak skończysz to przełączasz się na ten 2-gi
      • 4:
         
        CommentAuthormaly_swd
      • CommentTime31 Aug 2025 10:11 zmieniony
       
      .
      • 5:
         
        CommentAuthorMq
      • CommentTime31 Aug 2025 12:45
       
      Tak, @vega1 dobrze mówi. Jest to jedna z metod. W podobny sposób jeśli animujesz coś na małej ilości klatek, lub nie zależy Ci na miejscu w pamięci, to możesz mieć więcej ekranów, np. 4 i włączać je naprzemiennie, wtedy nic nie musisz rysować w trakcie, tylko się po prostu animuje a czasu nie zajmuje procesorowi praktycznie wcale. Zaleta większej ilości ekranów (2 lub więcej) jest taka, że ich przełączanie praktycznie nie zajmuje czasu, a procesor może robić coś innego. Wada natomiast taka, że im więcej ekranów jednocześnie narysowanych w pamięci, tym więcej pamięci to zajmuje.

      Inna metoda animacji jest taka, żeby rysować grafikę na bieżąco. W trybach graficznych niewiele się da w ten sposób zrobić, bo ekran zajmuje dużą ilość bajtów. Ale rozważ użycie zamiast trybu graficznego trybu znakowego. Praktycznie w najistotniejszych trybach rozdzielczości/ilości kolorów, mamy odpowiedniki trybów graficznych w trybach znakowych. W trybie znakowym da się narysować tę samą grafikę definiując odpowiednie fonty, a animacja takiego ekranu znowu daje kolejne możliwości, bo rysujesz całymi znakami, a nie pojedynczymi pikselami. Grafika w tym momencie zajmuje więcej miejsca w foncie, ale za to ekran zajmuje mniej miejsca w pamięci, a także rysowanie całymi znakami jest znacznie szybsze niż pikselami więc można animacje robić tak, że na bieżąco podmieniać znaki na ekranie.

      Jeszcze kolejne podejście: można podmieniać całe fonty na jednym raz narysowanym ekranie i w ten sposób animować.

      Kolejne: można też podmieniać ekrany nie w całości, tylko podmieniać np. kilka linii ekranu i tylko dla tych kilku linii mieć odrębne miejsce w pamięci. Takie coś oszczędzi dużo miejsca w pamięci. Adresy ekranu dla każdej linii odrębnie można ustawiać w display list i później animować to tak, że podmieniać tylko adres w display list.

      Tak czy inaczej animację trzeba sobie synchronizować w jakiś sposób do ramek, żeby nie było żadnego migotania. Musisz więc poznać mechanizm przerwań VBLI oraz DLI.

      Tak jak mówię: pytanie zadane bardzo szeroko, a odpowiedź na nie to właściwie kompendium wiedzy o tym jak programować na Atari, jak działają poszczególne układy Atari, jak zarządzać pamięcią itd. Najpierw trzeba to wszystko wiedzieć i zacząć jakieś testy i próby, a dopiero ma sens pytanie o szczegóły.
      • 6: CommentAuthortonual
      • CommentTime31 Aug 2025 20:32 zmieniony
       
      Serdecznie dziękuję za odpowiedzi i wskazówki! 

      Doprecyzuję.
      Temat nie na potrzeby gry ot - pojedynczy efekt - animacja poklatkowa obejmująca spory (prostokątny) fragment ekranu.
      Tryb ANTIC D, 160x96 x 4 kolory. Główna grafika 128x96, 6 klatek animacji 32x16

      Załączam poglądową infografikę i animację!

      Na razie idzie jak po gruzie coś działa, ale krzywo.
      Przyjmę każdą formę pomocy. Repozytorium:
      ->link<-
      • 7: CommentAuthortebe
      • CommentTime31 Aug 2025 22:00
       
      20x20 pikseli, operujesz na bajtach nie na pikselach, 20 pikseli to 5 bajtów x 20 linii czyli 100 bajtów na klatkę animacji

      tworzysz N 100 bajtowych zbiorów klatek, ustalasz adres takiej klatki i przepisujesz na ekran

      for y:=0 to 19 do 
      for x:=0 to 4 do
      poke(adres_pozycji_na_ekranie + x + y*40, peek(dane_klatki + x + y*5));
      • 8: CommentAuthortonual
      • CommentTime1 Sep 2025 17:21
       
      Ostatecznie chodzi mi po głowie narzędzie, które
      umożliwi "nietechnicznym" tworzyć opowiadania
      okraszone multimediami :-] czyli tekst, obraz animacja, muzyka.
      na stockowe A8 XL/XE.

      Swego rodzaju audiowizualny "komiks" złożony na zasadzie "data driven development".
      Wymyślunki spisane w readme:
      ->link<-

      Mad Pascal daje takie możliwości i temat jest praktycznie na wyciągnięcie ręki, ale
      gorzej jest u mnie z wiedzą techniczną o a8, dlatego będzie trochę śmiechu na początku ;)
      ale nadrabiam.. w miarę możliwości.

      Chętnie przyjmę wszelkie uwagi/korekty/sugestie itd.
      • 9: CommentAuthortebe
      • CommentTime1 Sep 2025 17:27 zmieniony
       
      Pebe na SV przedstawił taką historię

      ->link<-

      program do animacji dla Atari to Movie Maker

      • 10: CommentAuthortonual
      • CommentTime1 Sep 2025 20:01 zmieniony
       
      @tebe
      to bardzo bogata animacja i ogląda się rewelacyjnie!

      W sferze rozwiązań dla stockowego a8 - animacja skromniejsza,
      ale okraszona fabułą, muzyką i podzielona na rozdziały -
      pobudza wyobraźnię unikając przesycenia formy.
      W myśl zasady "Less is more".

      Najchętniej skorzystał bym z gotowego rozwiązania, ale takiego nie ma.
      Nie jest moim celem zgłębienie technikalii a8, tylko opowiadanie historii.
      Dlaczego akurat na a8? - no to wiadomo, mieszka tam dusza Jay'a Miner'a.

      Proszę o podzielenie się wiedzą i uwagami - i skrócenie mnie jak najszybciej!
      jeśli których z opisanych kamieni milowych jest zwyczajnie nieosiągalny na a8.

      Jak to mówią w branży - fail fast.
      • 11:
         
        CommentAuthorjhusak
      • CommentTime2 Sep 2025 15:04 zmieniony
       
      W sumie prostą rzeczą jest zrobić kompresor, który pominie ileś bajtów, przepisze ileś bajtów i tak w kółko. Wtedy klatki są zmiennej długości, nie ma ograniczenia obszaru, etc. A na Atari bierzemy znacznik, tyle bajtów przepisz, znacznik, tyle bajtów opuść, itd. To nie bierze pod uwagę powtórzeń, ale przypomina animowanego gifa (który updejtuje prostokątne obszary afaik).