Форум 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=124061)

DizzWebS 20.04.2009 12:18

Проблема при создании кнопок с использованием условий
 
Не знаю, насколько правильно назвал тему, другое название в голову не лезет, но есть такая проблема:
есть, к примеру 2 кнопки на 2-х разных слоях. И надо сделать так, чтобы при нажатии на:
- ПЕРВУЮ кнопку игрались кадры, которые следуют сразу за ней (допустим со 2 по 5-й) и потом дальше игрались кадры, идущие после этой кнопки (допустим с 6-го по 8-й).
- ВТОРУЮ кнопку игрались всё те же кадры сразу после кнопок (2-5), и потом игрались бы кнопки, которые идут с 9-го по 10-й кадры, минуя кадры 6-8.

По идее условие должно быть такое, что
Если нажата кнопка1, то СледоватьИИграть(2), затем СледоватьИИграть(6)
Если нажата кнопка2, то СледоватьИИграть(2), затем СледоватьИИграть(9)

(на главной сцене над кадром 5, 7 и 10 в AS прописан stop(); )

т.к. я новичёк в AS и флэше в целом, то многого ещё не знаю, в т.ч. как сделать именно такое условие. Делал нечто вроде
Код AS1/AS2:

this.onRelease = function() {
if (this.onRelease) { //у меня просто сам код внутри кнопки написан,
                                  //а точнее внутри MovieClip
                _root.gotoAndPlay(2);
        } else if (this.onRelease) {
                _root.gotoAndPlay(9);
        }
 
};

Я знаю, что это не правильный код, но я совершенно не в курсе, как его подправить под правильный. Пробовал вместо else if писать and if, но and здесь не катит, т.к. не относится похоже к if ... else :) (Ну сочиняю AS просто на ходу:))

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

Добавлено через 1 минуту
хм, интересно, а если использовать вместо else if слово then)))...

Добавлено через 1 минуту
не, не катит, к сожалению

Psycho Tiger 20.04.2009 12:26

О боже...
Аналогия кода: мы пойдем на север, когда мы можем пойти на север, а если мы не можем пойти на север, но можем пойти на север, то мы пойдем на юг.

Следовать и играть - это gotoAndPlay? Я не знаю, кто надоумил переводить это... но лучше ненадо.

Цитата:

- ПЕРВУЮ кнопку игрались кадры, которые следуют сразу за ней (допустим со 2 по 5-й) и потом дальше игрались кадры, идущие после этой кнопки (допустим с 6-го по 8-й).
Сначала надо чтобы пошел со второго на третий, потом после третьего сразу на четвертый, а после четвертого на пятый, а потом надо играть шестой кадр, потом седьмой, а не восьмой, восьмой после седьмого...
Блин, я долго думал что ты имел ввиду написав это. Сказал бы - со 2 по 8, не?
Цитата:

- ВТОРУЮ кнопку игрались всё те же кадры сразу после кнопок (2-5), и потом игрались бы кнопки, которые идут с 8-го по 10-й кадры, минуя кадры 6-8.
Ну тут уже лучше.)
В 6 кадре мувиклипа пишешь нечто вроде
Код AS1/AS2:

if (skip) gotoAndPlay(9);

на кнопке:
Код AS1/AS2:

btn1.onRelease=function(){
mc.skip=false;
mc.play();
}

На другой:
Код AS1/AS2:

btn2.onRelease=function(){
mc.skip=true;
mc.play();
}


Wolsh 20.04.2009 12:30

onRelease - это не состояние кнопки)) Это функция-обработчик события, какое-то действие, поэтому запись if(onRelease) бессмысленна здесь. Вам надо просто завести "флаг" - переменную, хранящую данные, какая кнопка была нажата последней. И на перекрестке (в 6 кадре) проверять - если нажата одна, то переходим сразу на восьмой (9?), а если другая - то ничего не делаем, играем себе дальше.

Добавлено через 1 минуту
Земляк опередил опять)))

DizzWebS 20.04.2009 12:33

Цитата:

Следовать и играть - это gotoAndPlay? Я не знаю, кто надоумил переводить это... но лучше ненадо
ну эт я сам)))) Так, чтоб понятней было. А со skip сейчас попробую.
Цитата:

Сказал бы - со 2 по 8, не?
Не совсем. Над 5-м просто stop(); висит. Он остановится, и потом надо, чтобы он продолжил грубо говоря.

Идея вся в том, чтобы при нажатии на кнопки, они постепенно исчезли, и вместо них появились другие. Тоесть нажимаем на кнопку 1, ОБЕ кнопки исчезают(2-5), и появляется другая пачка кнопок (6-8 кадры). А если нажимаем на конпку 2, то опять исчезают ОБЕ кнопки (2-5), и появляется снова пачка кнопок, но уже с другим содержанием (тоесть эти кнопки располагаются на кадрах 9-10. //КСТАТИ да, не с 8 по 10-й, а с 9-го по 10й кадры, сча первый пост подправлю)

Добавлено через 2 минуты
Цитата:

Сообщение от Wolsh (Сообщение 814107)
Вам надо просто завести "флаг" - переменную, хранящую данные, какая кнопка была нажата последней. И на перекрестке (в 6 кадре) проверять - если нажата одна, то переходим сразу на восьмой (9?), а если другая - то ничего не делаем, играем себе дальше

Хм, а поподробней можно? Как переменную задать, я знаю, а вот проверить, какая кнопка нажата - это труднее:o

Добавлено через 6 минут
хм, сейчас глянул тут на форуме надпись со skip, которую Psycho Tiger написал, и сразу вопрос - а если кнопок больше будет? не пойдёт, наверное. Просто кнопок у меня больше..

Wolsh 20.04.2009 12:40

Исчезали, появлялись.. - с помощью кадров? Вы часто в мультиках на кнопки жмете? Вы представляете себе реализацию например Ворда в виде мультипликации - если нажали клавишу с "В" то переходим на кадр где в документе есть буква "В" и т.д...??? Разберитесь в своих желаниях - программа и мультик две совершенно разные вещи. Переход по кадрам и поведение по событиям не совместимы. В большинстве случаев)) Не по основному таймлайну уж точно.

DizzWebS 20.04.2009 12:43

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

Добавлено через 3 минуты
Если рассматривать моё "творчество" без исчезаний и появлений, то тут всё очень просто, я бы даже не спрашивал. Там используется только gotoAndPlay (кадр,_который_нужен);
Но так не красиво и неинтересно, поэтому может всё же возможно как то осуществить такую "прыгалку" по кадрам?

DizzWebS 20.04.2009 13:00

Вложений: 1
вот скрин, чтобы было понятней.

DizzWebS 20.04.2009 13:29

ха, всё гениальное просто:) Не надо никаких не if было, не else)) надо было просто добавить gotoAndPlay (тот_кадр_на_который_хотим_перескочить); ))))

а вы - не реально, не реально :D

Добавлено через 1 минуту
тоесть код располагается внутри редактирования символа (MovieClip), и код такой:
Код AS1/AS2:

this.onRelease = function() {
                _root.gotoAndPlay(37);
                _root.gotoAndPlay(56);
};

А тормозит засчёт
Код AS1/AS2:

stop ();

на основной линии:)

Добавлено через 7 минут
забераю свои слова обратно) Не "проканало", что называется)) блин, как же победить то проблему

Stargazer 20.04.2009 13:42

Цитата:

Сообщение от DizzWebS (Сообщение 814110)
Как переменную задать, я знаю, а вот проверить, какая кнопка нажата - это труднее:o

Рассуждайте более точно и последовательно - и вы сами сможете находить многие ответы.

Вот, например, "проверить, какая кнопка нажата".
Нажатие кнопки - это мгновение. Поэтому рассуждение нелогично. Или вы предлагаете пользователю держать кнопку нажатой, пока вы не проверите нажатие?

Логично иначе. "Как проверить, какая кнопка была нажата последней". Или, например, "как сделать что-то, когда пользователь нажал на кнопку".

Теперь ответ на цитату:
У вас есть обработчик нажатия кнопки:
Код AS1/AS2:

this.onRelease= function(){
    //тело функции
}

И вы хотите знать, какая кнопка была нажата последней. Просто сделайте это сами:

Код AS1/AS2:

vashaKnopkaNomer1.onRelease= function(){
    _root.bylaNajataKnopka= 1;
};
 
vashaKnopkaNomer2.onRelease= function(){
    _root.bylaNajataKnopka= 2;
}

Когда вам потребуется проверить эту информацию, пишите:
Код AS1/AS2:

if (_root.bylaNajataKnopka == 1){
  // то, что будет выполнено, если нажата первая
};
 
if (_root.bylaNajataKnopka == 2){
  // то, что будет выполнено, если нажата вторая
};

Когда общая идея понятна - дальше уже несложно.


Цитата:

тоесть код располагается внутри редактирования символа (MovieClip), и код такой:
Код AS1/AS2:

this.onRelease = function() {
                _root.gotoAndPlay(37);
                _root.gotoAndPlay(56);
};


Я очень сомневаюсь, что кнопка действительно делает то, что вы хотите. Смотрите сами: куда вы хотите отправить воспроизведение, всё-таки? На 37-й или 56-й кадр? Думаю, что в итоге воспроизведение продолжится с 56-го, а предыдущую строку флеш просто проигнорирует (точнее - не успеет выполнить).

DizzWebS 20.04.2009 14:21

да, так и есть, игнорит.

Идея понятна, но не совсем:)
Вот здесь:
Код AS1/AS2:

vashaKnopkaNomer1.onRelease= function(){
    _root.bylaNajataKnopka= 1;
};

как я понимаю это: vashaKnopkaNomer1 можно прописать как this
а вот это: bylaNajataKnopka - не понимаю, что это такое. у меня AS и это, и значение этого (= 1) подсвечивает черным. Если это имя переменной, то не совсем пониамю, где назначить можно его. Я внутри редактирования MovieClip прописал нечто вроде
Код AS1/AS2:

this.onRelease = function() {
                _root.btn_o = 1;
};

а на основной сцене такое:
Код AS1/AS2:

if (_root.btn_o == 1){
        gotoAndPlay (56);
}

Но ничего) Где-то не дописываю что-то. Либо может не там.

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


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

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