Оптимальный метод проверки нажатия клавиш на TI-89

Для эксперимента я решил запрограммировать небольшую игру в свой TI-89 с помощью встроенного редактора программ, однако я не могу найти оптимальный способ получения нажатий клавиш без значительной задержки. В настоящее время у меня есть:

Prgm

70→xpos
70→ypos

Loop

If getKey()=340 Then
xpos+3→xpos
PxlCrcl ypos,xpos,5,1
EndIf

If getKey()=337 Then
xpos-3→xpos
PxlCrcl ypos,xpos,5,1
EndIf

If getKey()=257 Then
Goto end 
EndIf

EndLoop
Lbl end

EndPrgm

Это создает бесконечный игровой цикл, который проверяет, нажаты ли кнопки влево, вправо или удаление, и рисует круг влево или вправо соответственно или полностью завершает программу. Однако этот метод, кажется, работает очень медленно, и я видел гораздо более плавное движение в других демонстрациях. Что-то не так с моим методом, и если да, то как я могу его улучшить?


person Carlos David Machado    schedule 16.04.2015    source источник
comment
Вы пытались установить getKey() в переменную, а затем проверить переменную? У меня нет с собой калькулятора, чтобы проверить это, но кажется, что запуск getKey() несколько раз (по одному для каждого оператора If) может замедлить его больше, чем простое тестирование переменной.   -  person jaysoncopes    schedule 18.05.2015


Ответы (2)


Извините, я использую TI-84, но этот метод все равно должен работать.

Функция getKey() создает задержку. Вам нужно запустить функцию getKey() только один раз, если вы поместите вывод в переменную. В TI-84 можно просто сделать

getKey->K

Вы должны быть в состоянии сделать то же самое с TI-89.

Надеюсь это поможет!

person Douglas - 15 year old Pythoner    schedule 16.12.2015

Что я обычно делаю, так это использую оператор While not(), а затем проверяю ответ.

Например

loop
0 -> X
while not(X)
    do something every iteration
    getKey()
    if Ans: Ans -> X
Check values of X with If statements
End loop

Таким образом, вы просто выполняете некоторый код (может быть, какое-то базовое сложение и вычитание или цикл For, чтобы замедлить работу) и один оператор If в каждом цикле оператора While вместо проверки множества операторов If в каждом цикле.

Это сослужит вам хорошую службу и позволит вам делать что-то на каждой итерации цикла While, продолжая проверять нажатие клавиши.

Обратите внимание, что я обычно программирую на TI-84, но идея должна работать точно так же и на TI-89 с небольшой настройкой.

person Zenohm    schedule 24.06.2015