pRoGraMerZ


Forum pRoGraMerZ Strona Główna -> Assembler -> Pierwsze kroki Idź do strony Poprzedni  1, 2, 3, 4  Następny
Napisz nowy temat  Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz następny temat 
PostWysłany: Sob 3:15, 03 Gru 2005
Popiol
Poison Headcrab

 
Dołączył: 02 Lis 2005
Posty: 16
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Wygiełzów





Czas najwyższy dokończyć omawianie pseudo arkanoida, bo czekają w kolejce ciekawsze zagadnienia. Opowiem jeszcze tylko jak jest robiona animacja i jak są pobierane dane z klawiatury.

Po etykiecie main następuje pętla główna programu. Odpowiada ona pojedynczej klatce animacji. Aby zapanować nad czasem trwania klatki wstawiamy sleepa. Nie jest on tutaj najlepiej zrealizowany, bo zajmuje niepotrzebnie czas procesora, ale raczej nie da się tego lepiej zrobić w programie typu com, bo nie możemy odnosić się do adresów spoza segmentu programu. Jest takie przerwanie, które wywoływane jest 18 razy na sekundę. Ma ono numer 1Ch i nazywa się System Timer Tick. Najlepiej byłoby podpiąć pod to przerwanie swoją funkcję odpowiadającą za animacje. Niestety do tego właśnie jest potrzebna możliwość używania adresów spoza segmentu. Zrobimy sobie to przy innej okazji, tymczasem użyłem prymitywnego sleepa, który wywołuje w pętli przerwanie 1Ch. Zrobiłem tak z nadzieją, że przerwanie to będzie trwało 1/18 sekundy, ale to był błąd rozumowania. To przerwanie standardowo nie robi nic. W każdym razie samo wywołanie przewania zabiera trochę czasu, a wykonane 20000 razy zabiera jeszcze więcej czasu. Dodatkowo piłka jest przesuwana w co drugiej klatce, dzięki czemu rakieta może poruszać się dwa razy szybciej od piłki.

Przy takim sytemie nie możemy wczytywać znaków z klawiatury funkcją, która czeka na naciśnięcie klawisza. Używamy funkcji, która sprawdza czy został naciśnięty klawisz, a jeśli tak to wczytuje. Jest to przerwanie z serii 16h o numerze 01h. Sprawdzenie czy przycisk został naciśnięty wykonujemy instrukcją je etykieta. Polecenie to wykona skok do etykiety jeśli nie można wczytać żadnego znaku. Jeśli znak został wczytany to jego kod jest w rejestrze ax, tzn w al jest kod ascii, ale dopiero razem z rejestrem ah tworzy pełny kod wczytanego znaku (przyciski typu Del, End nie mają kodu ascii). Oczywiście takie wczytywanie danych z klawiatury w przypadku gry jest ułomne. Przydałaby się tablica wciśniętych klawiszy, albo coś w tym stylu. Nie wiem jednak jak to zrealizować.

Tak przy okazji tego sleepa, to jest takie fajne przerwanie, które liczy ilość tyknięć zegara od północy. Tyknięcie jest co 1/18 sekundy. Jeśli dopiszemy po etykiecie main coś takiego:

Kod:
    mov ah, 0
    int 1Ah
    mov ax, 0ffh
    and dx, ax
    mov punkty, dx


to zamiast punktów wyświetlać się będą 3 ostatnie cyfry licznika tykinięć. Przerwanie jest z serii 1Ah o numerze 0. Liczba tyknięć jest zwracana w rejestrach cx (bardziej znaczący bajt) i dx (mniej znaczący bajt).


Post został pochwalony 0 razy
Zobacz profil autora
PostWysłany: Wto 13:24, 27 Lut 2007
Abadmoster9
Poison Headcrab

 
Dołączył: 27 Lut 2007
Posty: 13
Przeczytał: 0 tematów

Ostrzeżeń: 0/5





Britney Spears Spreading Outdoors!
[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Zobacz profil autora
PostWysłany: Wto 13:25, 27 Lut 2007
Abadmoster9
Poison Headcrab

 
Dołączył: 27 Lut 2007
Posty: 13
Przeczytał: 0 tematów

Ostrzeżeń: 0/5





Christina Ricci Undressing!
[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Zobacz profil autora
PostWysłany: Sob 1:42, 10 Mar 2007
Birchwoodian
Zombie

 
Dołączył: 10 Mar 2007
Posty: 20
Przeczytał: 0 tematów

Ostrzeżeń: 0/5





Nicole Kidman Blowjob!
[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Zobacz profil autora
PostWysłany: Pon 22:36, 20 Sie 2007
Hilaire Shichiro
Gość

 





Honey disconnect the phon. Hilaire Shichiro.
Pierwsze kroki
Forum pRoGraMerZ Strona Główna -> Assembler
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Wszystkie czasy w strefie EET (Europa)  
Strona 3 z 4  
Idź do strony Poprzedni  1, 2, 3, 4  Następny
  
  
 Napisz nowy temat  Odpowiedz do tematu  


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001-2003 phpBB Group
Theme created by Vjacheslav Trushkin
Regulamin