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 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
     
    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
     
    dla porzadku: ten ksztalt zbudowany jest z jednego playera tak?
    testujesz na atari?
    • 4: CommentAuthorBluki
    • CommentTime22 May 2013
     
    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
     
    Bluki: zmyślasz.
    • 6: CommentAuthorBluki
    • CommentTime23 May 2013 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
     
    Uwaga na coś takiego: ->link<-
    • 9: CommentAuthorxxl
    • CommentTime23 May 2013
     
    @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 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
     

    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.
    • 13:
       
      CommentAuthormgr_inz_rafal
    • CommentTime22 Jun 2013 zmieniony
     
    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
     
    może admin AA czyta ForumAtarum ? ;-)