|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
попробую я на палочках=)
const STATE_RUNNING:int = 0; const STATE_STOPPED:int = 1; var state:int = STATE_RUNNING; function onEnterFrame(e:Event = null):void { switch(state) { case STATE_RUNNING: //тут происходит игра, когда нужно ввести что-то, state = STATE_STOPPED; break; case STATE_STOPPED: //тут происходит ввод, ничего не делаем, пока пользователь не нажмёт Enter, по нему state = STATE_RUNNING; break; } } дальше идет инструкция switch(state) - она смотрит значение state и дальше сравнивает значения, которые стоят в case, если они равны, то выполняется инструкция, которая стоит после case до конца инструкции, либо до break По вашему варианту вам следует подписаться на события клавиатуры, тогда при нажатии клавиши будет срабатывать функция, а в ней вы уже проверяете что нажал игрок и какое действие/бездействие будет, т.е. будет switch, в которое заносится кнопка нажатая игроком и будет сравниваться со значениями стоящими в case, если будет совпадение, то выполняется соответствующий код. Раз у вас есть перезарядка и мана, то стоит дополнить дополнительными условиями, тот же switch или if и проверять наличие маны и перезарядку и выполнять соответствующие инструкции Последний раз редактировалось neonoviiwolf; 28.06.2016 в 00:31. |
|
|||||
Регистрация: Jun 2014
Адрес: Санкт-Петербург
Сообщений: 185
|
Спасибо за палочки, но я все же смог разобраться в ответе ZackMercury
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Разве нет? Значит, ошибся.
Думаю, самым надёжным будет подписка на события клавиатуры и по нажатию Enter отписка и смена состояния Например const STATE_RUNNING:int = 0; const STATE_STOPPED:int = 1; var state:int = STATE_RUNNING; stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); //допустим, tF - наше текстовое поле для ввода function onEnterFrame(e:Event = null):void { switch(state) { case STATE_RUNNING: //тут происходит игра, когда нужно ввести что-то, state = STATE_STOPPED; break; case STATE_STOPPED: //тут происходит ввод, ничего не делаем, пока пользователь не нажмёт Enter, по нему state = STATE_RUNNING; if(!tf.hasEventListener(KeyboardEvent.KEY_DOWN)) tf.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); break; } } function onKeyDown(e:KeyboardEvent = null):void { if(e.keyCode == Keyboard.ENTER) { //тут выполняем действия с текстовым полем, вытаскиваем текст, сохраняем и т.д., а затем state = STATE_RUNNING; tF.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } }
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 28.06.2016 в 11:00. |
|
|||||
Вот такую проверку
Цитата:
Да и вообще, зачем добавлять слушатель клавиатуры в энтерфрейме, а потом отписываться от него? Смысл? Можно подписаться на ввод клавиатуры заранее, а потом вообще не отписываться от него. Достаточно будет какого-то простого флага, типа if (isInputAllowed) в методое обработчика, чтобы определить можно что-то вводить с клавиатуры или нет. Не думал, что такая простая задача вызовет такое бурное обсуждение)
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Jun 2014
Адрес: Санкт-Петербург
Сообщений: 185
|
Цитата:
WAITING PROCESSING_INPUT AUTOPLAY В PROCESSING_INPUT совершается переход, только если текущее состояние является WAITING |
|
|||||
Цитата:
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Jun 2014
Адрес: Санкт-Петербург
Сообщений: 185
|
"В" в всмысле into, а не in
Добавлено через 4 часа 38 минут Проблема: выполнение цикла останавливается после диспетчеризации события и не возобновляется после окончания приемника Добавлено через 21 час 21 минуту Я переписал код для ENTER_FRAME и проблема исчезла. Теперь я понял, что выполнение кода после диспетчеризации события останавливается полностью и не возобновляется само. Спасибо всем |
Часовой пояс GMT +4, время: 18:11. |
|
« Предыдущая тема | Следующая тема » |
|
|