atarionline.pl Sprzętowe kolizje - dokładność, ograniczenia? - 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:
         
        CommentAuthormgr_inz_rafal
      • CommentTime22 May 2013 21:05 zmieniony
       
      Hej,
      Badam sobie kolizje gracza z playfildem w trybie GR.0. Rejestr P0PF sprawdzam i czyszczę w VBI (zgodnie z zaleceniami z De Re Atari - Rozdział 4).

      Zauważyłem jednak, że mój ludek "lewą" nogą dobrze wykrywa kolizje, natomiast prawą może spokojnie wdepnąć w ścianę.

      Ma ktoś jakiś pomysł co może być przyczyną?

      A tak to wygląda:
      Tu ludek jeszcze stoi (lewa noga na samej krawędzi):


      Tutaj z jakiegoś powodu zaczął wpadać w ścianę. W tym momencie w P0PF cały czas dostaję zero:


      A tutaj się zatrzymał, bo lewa(!) noga dotknęła gleby:
      • 2: CommentAuthor0xF
      • CommentTime22 May 2013 21:05
       
      Zakładam, że cały ludek jest na graczu 0.

      W takim razie na VBL powinieneś robić:
      lda P0PF
      ; teraz: a=0 brak kolizji, a=4 kolizja
      ; potem:
      sta HITCLR
      • 3: CommentAuthorxxl
      • CommentTime22 May 2013 21:05
       
      dla porzadku: ten ksztalt zbudowany jest z jednego playera tak?
      testujesz na atari?
      • 4: CommentAuthorBluki
      • CommentTime22 May 2013 22:05
       
      Może zbyt szybko odczytujesz rejestr kolizji po jego skasowaniu. Kolizja jest zaznaczana w chwili jej wystąpienia, ale ze względu na konstrukcję GTIA upływa kilkanaście milisekund (chyba) zanim zostanie zmieniony odpowiedni bit w rejestrze kolizji.
      Niektórzy zalecają skasowanie rejestru i przesunięcie PMG w trakcie przerwania pionowego, a odczyt rejestru w głównym programie.
      • 5: CommentAuthor0xF
      • CommentTime22 May 2013 22:05
       
      Bluki: zmyślasz.
      • 6: CommentAuthorBluki
      • CommentTime23 May 2013 01:05 zmieniony
       
      Według procedur sprzętowych kolizja ma miejsce wówczas, jeżeli jeden obraz na ekranie zacznie nakładać się na drugi obraz. A więc bit sygnalizujący kolizję nie zostanie włączony, dopóki obiekt ekranowy nie zostanie całkowicie narysowany w danej pozycji. Stąd od momentu wystąpienia kolizji do czasu jej zasygnalizowania może upłynąć nawet 16 milisekund potrzebnych programowi na przeniesienie obrazu. Jeżeli jest to zbyt długi okres czasu, należy procedurę przesuwania obiektu oraz detekcji kolizji wykonać w czasie przerwania wygaszenia pionowego (patrz rozdział 8, gdzie dyskutowane są przerwania wygaszenia pionowego). W takim przypadku najpierw powinna zostać sprawdzona kolizja, następnie wyzerowane rejestry kolizji, po czym wykonane przesunięcie obiektu. W przeciwnym wypadku należy uwzględnić owe 16 milisekund w programie, jakie powinny upłynąć od chwili wystąpienia kolizji do chwili sprawdzenia odpowiedniego rejestru kolizji przez program.

      De Re Atari, „Sprzętowa detekcja kolizji”, s. 32.




      Atari Intern, s. 64.
    1.  
      @0xF
      Tak, cały ludek jest na graczu 0. Przerwanie wygląda właśnie tak, jak napisałeś.

      @Bluki
      O tej zasadzie wiem, chociaż to akurat nie ten przypadek. Ten problem o którym piszesz może objawiać się tym, że dla danego układu na ekranie kolizja nieraz będzie wykryta, a nieraz nie. U mnie sytuacja jest taka, że kolizja wykrywa się jednoznacznie, ale tylko dla lewej strony gracza (dokładnie, do jego pierwszej kolumny) :)

      @xxl
      Bingo! Nie pomyślałem, aby wczoraj wieczorem sprawdzić jeszcze na Atarce. Na prawdziwym sprzęcie działa dobrze, co po raz kolejny potwierdza, że w Altirra jest coś nie tak z wykrywaniem kolizji. Wcześniej zderzyłem się z tym już tutaj:
      ->link<-

      Kurde, to znacząco utrudni prace nad moim wspaniałym endżinem, bo Atari800Win (też dobrze wykrywający kolizje) nie ma tego "mount as DOS 2 disk" :(
      • 8: CommentAuthormono
      • CommentTime23 May 2013 12:05
       
      Uwaga na coś takiego: ->link<-
      • 9: CommentAuthorxxl
      • CommentTime23 May 2013 18:05
       
      @mgr_inz_rafal jesli widzisz blad w emulacji to go zglos na atariage w watku altirry 2.3. najszybciej bedzie jesli zrobisz przykladowy programik dajacy rozne wyniki na emu i na atari.
    2.  
      Racja, chyba czas założyć tam konto.
      • 11:
         
        CommentAuthorjhusak
      • CommentTime23 May 2013 21:05 zmieniony
       
      IMHO czytelność tekstu z Atari Intern (powyższy fragment) pozwala mi zaryzykować stwierdzenie, że tłumaczenie jest nieco błędne.

      Z mojej wiedzy kolizje wykrywane są rzeczywiście chwilę później ale jest to kilka cykli; Natomiast kolizje są zbierane z całego ekranu przez całą ramkę, może stąd wzięły się te milisekundy. Jednak nie upieram się:)
      • 12: CommentAuthor0xF
      • CommentTime23 May 2013 21:05
       

      jhusak:

      Natomiast kolizje są zbierane z całego ekranu przez całą ramkę, może stąd wzięły się te milisekundy.

      Stawiam, że o to chodziło. Mętnie to napisane.
    3.  
      OK, czy ktoś wie, jak długo na AtariAge konto jest w stanie "Validating"?

      Czekam od 25 maja :)

      Na razie dostaję komunikat "You are not permitted to modify all or some of your profile information.", a bez karczemnego avatara nie będę publikował :)

      ______________
      Edit:
      Kurde, prorok jaki czy co?

      Właśnie dostałem maila: "An administrator has accepted your registration request or email address" :)
      • 14:
         
        CommentAuthorMaW
      • CommentTime22 Jun 2013 21:06
       
      może admin AA czyta ForumAtarum ? ;-)