Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ожидание удовлетворительного пользовательского ввода (http://www.flasher.ru/forum/showthread.php?t=213083)

Wormhole 27.06.2016 21:50

Ожидание удовлетворительного пользовательского ввода
 
Здравствуйте.
Я реализую алгоритм по следующей схеме:

Код AS3:

while (Некоторое условие)
{
  делать то-то;
  ждать нажатия клавиши с цифрой, для которой будут выполнены условия;
  делать се-то;
}

Условия для клавиши связаны со значениями переменных в коде.

Я немного запутался. Как бы вы посоветовали мне это правильно реализовать?

ZackMercury 27.06.2016 22:08

Такие конструкции в AS3 не используются, а если и используются, то только с большущими костылями.
Если вам принципиальна конструкция, предлагаю написать 2-3 метода, которые организуют то, что вам нужно, вызывая друг друга циклически.
Мне кажется, или те, кто были новичками 2 года назад в AS3, стали задавать ещё более странные вопросы?

Развёрнутый ответ:
События в AS3 используют асинхронный режим. Та конструкция, которую привели вы используется только в языках, где события синхронны, и ждут события прежде, чем выполнять дальнейший код. В AS3 вы подписываетесь на событие, и код продолжает выполняться. При этом он выполняется параллельно с вызываемыми коллбеками.

Wormhole 27.06.2016 22:51

Цитата:

Сообщение от ZackMercury (Сообщение 1195158)
Такие конструкции в AS3 не используются, а если и используются, то только с большущими костылями.
Если вам принципиальна конструкция, предлагаю написать 2-3 метода, которые организуют то, что вам нужно, вызывая друг друга циклически.
Мне кажется, или те, кто были новичками 2 года назад в AS3, стали задавать ещё более странные вопросы?

Развёрнутый ответ:
События в AS3 используют асинхронный режим. Та конструкция, которую привели вы используется только в языках, где события синхронны, и ждут события прежде, чем выполнять дальнейший код. В AS3 вы подписываетесь на событие, и код продолжает выполняться. При этом он выполняется параллельно с вызываемыми коллбеками.

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

P. S. Все еще хуже, чем вы думаете. AS3 я стал изучать незадолго до выхода Creative Studio 6, т. е. где-то 3 с половиной года назад). Но Колина Мука я все же читал и об асинхронности событий в AS3 знаю

ZackMercury 27.06.2016 22:53

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

Wormhole 27.06.2016 22:58

Цитата:

Сообщение от ZackMercury (Сообщение 1195165)
Такую конструкцию лучше приберечь для языков с синхронными ивентами, в AS3 им не место, не нужно её реализовывать.
Есть конкретная задача, с которой AS3 справляется легко, а есть надуманные конструкции, которые якобы кажутся понятными, с которыми AS3 не дружит.

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

ZackMercury 27.06.2016 22:59

Дайте конкретную задачу. Что, например?

Wormhole 27.06.2016 23:07

Цитата:

Сообщение от ZackMercury (Сообщение 1195167)
Дайте конкретную задачу. Что, например?

Пошаговая игра. Боты-противники применяют свои способности, затем ждем игрока, от которого требуется ввести номер одной из десяти своих способностей. При этом, если соответствующая способность будет на перезарядке, или, скажем, на нее будет нехватать маны, мы все так же ждем валидного ввода. Затем боты-напарники применяют свои способности и все начинается по новой. Продолжаем этот цикл пока суммарное здоровье хотя бы одной из команд не опустится до 0.

ZackMercury 27.06.2016 23:11

Для этого используются состояния. Но, так как в AS3 нет enum, обычно они перечисляются в целочисленных константах и берут значения 0~∞.
Каждый кадр происходит switch по текущему состоянию, и в зависимости от него выполняются конкретные действия.
После ввода игрока, вы переключаете состояние, и продолжаете всё, что надо, затем переключаете состояние снова.

Код AS3:

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;
    }
}


Wormhole 27.06.2016 23:17

Цитата:

Сообщение от ZackMercury (Сообщение 1195169)
Каждый кадр происходит switch по текущему состоянию, и в зависимости от него выполняются конкретные действия

Не очень понял, я во FlashDevelop работаю.
И что есть состояния?

ZackMercury 27.06.2016 23:21

Цитата:

И что есть состояния?
Парадигма. Я столкнулся с ней, когда пытался программировать искусственный интеллект.
https://ru.wikipedia.org/wiki/%D0%90...BD%D0%B8%D0%B5


Часовой пояс GMT +4, время: 15:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.