Как я могу использовать один и тот же ключ для разных вещей в javascript canvas? - PullRequest
0 голосов
/ 06 марта 2020

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

Например,

if(enterPressed) {

   // do one thing


}

if (enterPressed) {

    //Do some other thing


}

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

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

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Пример кода в вопросе состоит из двух операторов в строке, которые, как я предполагаю, вы хотите обработать enterPressed

Чтобы выполнить второе (или третье и более) действие, вам необходимо сохранить состояние входящих действий. Например, это первое нажатие?

// this in the setup code.
var enterAction = "firstPress"

Затем каждый раз, когда обрабатывается enterPressed, вы также должны проверить состояние, чтобы произошло правильное действие.

if (enterPressed && enterAction === "firstPress") {

Когда вы обрабатываете действие, вы также устанавливаете следующее состояние для обработки. Поскольку у вас есть два утверждения подряд, которые оба проверяют, истинно ли enterPressed, необходимо также указать, что вы обработали печать. Это может быть просто установка enterPressed = false

    enterAction = "secondPress";
    enterPressed = false; 
}

Таким образом, ваш код будет выглядеть так:

// Init the first enter state
const FIRST = 1, SECOND = 2;
var enterAction = FIRST;

И замена кода вопроса на

// Handling first press
if (enterPressed && enterAction === FIRST) {
    enterAction = SECOND;  // set action for next press
    enterPressed = false;  // clear press to indicate its been handled

    // do one thing
}

// Handling second press
if (enterPressed && enterAction === SECOND) {
    enterAction = FIRST;    // set action for next press
    enterPressed = false;   // clear press to indicate its been handled

    //Do some other thing
}    
0 голосов
/ 06 марта 2020

Ваш вопрос не указан c до JavaScript или Canvas, но больше относится к общим методам программирования. То, что вы описываете, это разные состояния вашей программы, а не 2 действия, которые выполняются как реакция на событие.

Так что думайте, что ваша программа состоит из нескольких состояний: Displayed first text to user -> Displayed second text to user

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

var currentIndex = 0;
var texts = ["This is first message", "This is second message"]
if (enterPressed) {
    //you need to have boundary checks of course, skipping for simplicity
    displayText(texts[currentIndex])
    currentIndex++;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...