Да, встроенная функция, дающая два кода клавиш, как-то не очень подходит для игр. Нажав диагональ и огонь - это уже три кнопки. Да и опрашивать каждый раз каждую клавишу клавиатуры, шифровка в две позиции. Потом расшифровка этих позиций... слишком много траты проц времени. Сейчас напишу альтернативный клавиатурный опросник.
- - - Добавлено - - -
Код:
KEY_1 EQU 0FEF7H
KEY_2 EQU 0FDF7H
KEY_3 EQU 0FBF7H
KEY_4 EQU 0F7F7H
KEY_5 EQU 0EFF7H
KEY_0 EQU 0FEEFH
KEY_9 EQU 0FDEFH
KEY_8 EQU 0FBEFH
KEY_7 EQU 0F7EFH
KEY_6 EQU 0EFEFH
KEY_Q EQU 0FEFBH
KEY_W EQU 0FDFBH
KEY_E EQU 0FBFBH
KEY_R EQU 0F7FBH
KEY_T EQU 0EFFBH
KEY_P EQU 0FEDFH
KEY_O EQU 0FDDFH
KEY_I EQU 0FBDFH
KEY_U EQU 0F7DFH
KEY_Y EQU 0EFDFH
KEY_A EQU 0FEFDH
KEY_S EQU 0FDFDH
KEY_D EQU 0FBFDH
KEY_F EQU 0F7FDH
KEY_G EQU 0EFFDH
KEY_EN EQU 0FEBFH
KEY_L EQU 0FDBFH
KEY_K EQU 0FBBFH
KEY_J EQU 0F7BFH
KEY_H EQU 0EFBFH
KEY_CS EQU 0FEFEH
KEY_Z EQU 0FDFEH
KEY_X EQU 0FBFEH
KEY_C EQU 0F7FEH
KEY_V EQU 0EFFEH
KEY_SP EQU 0FE7FH
KEY_SS EQU 0FD7FH
KEY_M EQU 0FB7FH
KEY_N EQU 0F77FH
KEY_B EQU 0EF7FH
KEYTEST
pop hl
inc hl
ld a,(hl)
inc hl
in a,(0feh)
or (hl)
inc hl
inc a
RLCA
AND 1
ld (_KEYPRESSED),a
jp (hl)
_KEYPRESSED defw 0
использовать нужно так(проверка пробела):
asm(keytest)
asm(key_sp);
if keypressed<>0 then game_state:=1;
Именно два вызова подряд. Второй вызов это не вызов, а передача константы.
Переменная keypressed возвращает 0-не нажато или 1-нажато.
- - - Добавлено - - -
На счёт проверки коллизий, тоже есть идея, как сделать это проще. Завести матрицу 32 на 16, и там хранить номер объекта, и нужно-ли очистить это знакоместо. Две проблемы сразу решатся.
Завтра попробую написать.