привязка движения в c ++ с использованием ncurses - PullRequest
1 голос
/ 29 мая 2011

Я не могу заставить это движение работать.Я использую библиотеку ncurses, update_ch и oldch являются глобальными переменными.KEYERR - это макрос, установленный на -120 (я просто не обрабатываю эти нажатия клавиш).Я пытаюсь ограничить игрока, чтобы он не мог держать вверх, вниз, влево или вправо, но он должен продолжать нажимать на них, чтобы двигаться.Это не работает, вы все еще можете удерживать клавиши и двигаться.Какие-либо предложения?Моя логика должна быть выключена.

    if(update_ch != KEYERR)
    {
          oldch = update_ch;
    }
    update_ch = getch();
    if(oldch == update_ch)
    {
          update_ch = KEYERR;
    }

1 Ответ

1 голос
/ 29 мая 2011

Я пытаюсь ограничить игрока, чтобы он не мог держать вверх, вниз, влево или вправо, но он должен продолжать нажимать на них, чтобы двигаться.

ЯЯ уверен, что это невозможно с проклятиями.Если я правильно помню, ругательства только получает символы из терминала.Он ничего не контролирует в процессе.

Измерение времени между такими показаниями может дать вам подсказку, если пользователь удерживает клавишу вместо постоянного нажатия.Я имею в виду, когда вы читаете, запишите следующее

  • Ключ чтения
  • Время чтения (с точностью до миллисекунды)

Когда вы читаете значениеспросите следующее:

  • Это то же самое, что последний ключ?
  • В чем разница между текущим временем и временем последнего чтения?

Если это та же клавиша и разница во времени меньше некоторого порога, вы можете решить, что он удерживает клавишу нажатой.

...