Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Строгая последовательность (http://www.flasher.ru/forum/showthread.php?t=119976)

st0rk 08.01.2009 13:46

Строгая последовательность
 
Добрый день.
Я уже задавал в одной из тем этот вопрос но тогда мне толком не рассказали как решить, а очень нужно, подскажите пожалуйста в таком вопросе...
у меня 5 кнопок и они должны нажиматься строго в последовательности (например 1,3,5,4,2,3,5,1,4 -это правильно иначе неправильно!)
как такое реализовать? с массивами не работал, в AS нуб, но хочу разобраться. на Вас только одна надежда.

Добавлено через 1 час 17 минут
может вот так:
Код AS3:

var massiv = new Array("1", "2", "3", "4","2", "5","5", "4","3", "1","6");
oborot_btn.onPress = function () {
        var ok = "1";
        if (ok <> massiv[1]) {
                trace("error")
                }
}

создали массив и потом при нажатии кнопки присваиваем какой-то переменной число, которое мы и будем проверять на валидность в массиве?
и так для каждой кнопки в той последовательности что нам нужно???

gloomyBrain 08.01.2009 16:11

Вам нужно знать какую кнопку Вы нажали
Для этого все здесь
далее нужно сравнить номер (id) кнопки с элементом массива

то есть для каждой кнопки вот такой код:
Пусть есть переменная (ОДНА для всех кнопок!)
Код AS1/AS2:

var numberOfElem:Number=0;

При нажатии на любую кнопку происходит увеличение значения переменной на 1
Код AS1/AS2:

++numberOfElem;// Здесь нужно именно так! это не то же что и numberOfElem++

После этого проверяется значение элемента массива под номером numberOfElem
Код AS1/AS2:

if(massiv[numberOfElement] == button.id){/// про button.id написано по ссылке
...Ваши пожелания и предложения
}


st0rk 09.01.2009 12:18

тоесть что-то наподобие этого?
Код AS3:

var massiv = new Array("1", "2", "3", "4","2", "5","5", "4","3", "1","6");
for (var z:Number = 1; z<=5; z++) {
        button.id = z;
var numberOfElem:Number=0;
++numberOfElem;
if(massiv[numberOfElement] <> button.id){
trace("error")
}
}

Вы написали что этот цикл фор должен цепляться на каждую кнопку?
или же может в отдельный слой AS?

Mnilionic 09.01.2009 13:18

Код AS1/AS2:

var massiv = new Array("1", "2", "3", "4", "2", "5", "5", "4", "3", "1", "6");
// подсказка
var hint = this.createTextField('hint', 1, 50, 10, 200, 20);
hint.text = massiv;
hint.border = true;
//
// создаём копки
// кол-во кнопок = максимальное значение в массиве
var max = massiv[ massiv.sortOn(null, 8|16).pop() ];
for(var i = 0; i < max; i++){
        var btn = this.createTextField('hint', i+5, 50 + i * 40, 50, 20, 20);
        btn.border = true;
        btn.html = true;
        btn.htmlText = '<a href="asfunction:push_the_button, '+(i+1)+ '">' +(i+1)+ '</a>';
        // для обычных кнопок
        //btn.i = i+1;
        //btn.onPress = push_the_button;
}
//
//
// функция проверки
var counting = 0;
function push_the_button(){
        var index = Number(arguments[0]);
        // для обычной кнопки
        //var index = this.i
        if( massiv[counting] == index){
                trace('правильно! продолжайте...')
                counting++;
        }else{
                trace('***' + newline + 'неправльно! Давай сначала.' + newline + '***');
                counting = 0;
        }
}


st0rk 09.01.2009 13:28

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

gloomyBrain 09.01.2009 14:21

если хотите сделать через имена - то почитайте по ссылочке в моём посте выше

Mnilionic 09.01.2009 23:33

st0rk
Код AS1/AS2:

btn1.i = 1;
btn1.onPress = push_the_button;
btn2.i = 2;
btn2.onPress = push_the_button;
...


AlexCooper 10.01.2009 03:24

Код AS1/AS2:

var massiv = new Array("1", "2", "3", "4", "2", "5", "5", "4", "3", "1", "6");
massiv.i=0;
 
btn_1.onPress=function()
{
        Recover(this._name);
}
 
btn_2.onPress=function()
{
        Recover(this._name);
}
 
Recover=function(s:String)
{
        if (massiv[massiv.i]==s.substring(4,s.length)) massiv.i++;
// else massiv.i=0;
}

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

UPD: Либо же так
Код AS1/AS2:

var massiv = new Array("1", "2", "3", "4", "2", "5", "5", "4", "3", "1", "6");
massiv.i=0;
 
btn_1.onPress=function()
{
        if (Recover(this._name)==true) Brain(this._name);
}
 
btn_2.onPress=function()
{
        if (Recover(this._name)==true) Brain(this._name);
}
 
Recover=function(s:String)
{
        if (massiv[massiv.i]==s.substring(4,s.length))
        {
                massiv.i++;
                return true;
        } else
        {
                //massiv.i=0;
                return false;
        }
}
 
Brain=function(s:String)
{
        if ( s== 'btn_1') trace('Действие первой кнопки');
        if ( s== 'btn_2') trace('Действие второй кнопки');
}

UPD2: Можно и так
Код AS1/AS2:

var massiv = new Array("1", "2", "3", "4", "2", "5", "5", "4", "3", "1", "6");
massiv.i=0;
 
btn_1.onPress=function()
{
        Recover(this._name);
}
 
btn_2.onPress=function()
{
        Recover(this._name);
}
 
Recover=function(s:String)
{
        if (massiv[massiv.i]==s.substring(4,s.length))
        {
                massiv.i++;
                Brain(massiv.i);
        }
        //        else trace('Бабах!!!! Вы нарушили последовательность');
}
 
Brain=function(step:Number)
{
        if ( step==1) trace('Запуск левого двигателя');
        if ( step==2) trace('Запуск правого двигателя');
        if ( step==3) trace('Включение взлёточных прожекторов');
        if ( step==4) trace('Тяга 60%');
        if ( step==5) trace('Тяга 80%');
        if ( step==6) trace('Высунуть закрылки');
        if ( step==7) trace('Отпустить ручной тормоз');
        if ( step==8) trace('Штурвал на себя');
        if ( step==9) trace('Тяга 100%');
        if ( step==10)trace('Спрятать шасси');
}

Добавлено через 30 минут
UPD III:
Первый "UPD" для того случая когда действия кнопки не меняеться
Второй "UPD" когда каждое действие уникальное по функционалу.

st0rk 16.01.2009 15:06

Mnilionic, все нравится встрочку, пусть так и будет, только вот чтобы кнопки-ссылки эти назывались не 1,2,3,4,5,6, а например ВВ, ОТК, УД и т.д. как такое сделать?

AlexCooper 16.01.2009 15:21

А чем вам мой пример не понравился?
Если нужно под Ваши не стандартизированные имена кнопок.
Меняем в массиве
Код AS1/AS2:

var massiv = new Array("имя_1", "имя_2", "имя_3", "имя_1", "имя_3");

и в функции Recover уберем отработку строки, то-есть
Код AS1/AS2:

if (massiv[massiv.i]==s)



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

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