SCNKEY
не подходит для игр, требующих одновременного ввода нескольких клавиш. Он не имеет состояния и просто возвращает клавишу, которая нажата сейчас — т. е. если нажаты две клавиши, она сообщит вам только об одной и официально не гарантирует, какая именно. Лучшее, что вы можете сделать, это считать, что клавиша все еще нажата, пока SCNKEY
не сообщит либо о том, что что-то еще нажато, либо о том, что ничего не нажато, но шансы на то, будет ли второе одновременное нажатие клавиши проигнорировано или заменит первое, будут равными.
Если ваша программа не соответствует ортодоксальности, когда нажимается только клавиша «the», вам придется самостоятельно нажимать на аппаратное обеспечение. Codebase64 предлагает пример кода; моя сводная версия такова (правильно настроив CIA, хотя, вероятно, он уже будет правильно настроен):
- запишите байт в DC00, который содержит 0 для каждой строки, которую вы хотите одновременно сканировать;
- прочитать байт из DC01 и проверить верхние четыре бита, чтобы узнать, какие клавиши в выбранных строках были нажаты.
Общая подпрограмма должна проверять каждую строку по отдельности, чтобы избежать затенения — предположим, вы попросили прочитать строки 4 и 5 одновременно, сохранив от 0 до DC00 в битах 3 и 4, и в результате, который вы получили, был очищен верхний бит, вы бы не знали, были ли нажаты v, n или оба, только то, что по крайней мере один из них нажат.
См. В самом низу той же ссылки, что и выше, для таблицы строк и столбцов на англоязычной клавиатуре; они являются результатом физической раскладки клавиш, поэтому другие языки будут различаться так же, как и их клавиатуры. Если вы пишете игру и вас больше интересует расположение клавиш, чем их символы, вам не нужно беспокоиться о языке.
person
Tommy
schedule
21.12.2016