PDA

Просмотр полной версии : Flash - кнопка


Chay
14.01.2010, 05:40
Здравствуйте. Новичок и нуждаюсь в совете. Сделал кнопку, все работает, но одна проблема:
Если у меня UP это pic1, OVER также pic1, а DOWN pic2 как сделать так чтобы после нажатия, кнопка оставалась вдавленной, то есть видеть изображение «pic2» ? У меня после нажатия возвращает изображение «pic1». Вдавливается и выдавливается.
Для информации: составные изображения «pic1-выпуклая» и «pic2-вдавленная» нарисованы отдельно и импортированы во flash как gif-файлы

McW
14.01.2010, 12:42
опа..
интересно зачем Гифы пихать во флэш, тем болие кнопками)

всё просто.
создаёте Баттон
рисуете все пазиции 1- вид кнопки, 2- кнопка при наведении мыши 3- кнопка нажатая.
копируете нарисованную нажатую кнопку в 3 леере.
делаете отдельный для неё мувиклип.
и пихаете в кадр вместо кнопки на которую нажимали неактивным объектом

и при нажатии на кнопку. идёт переход на кадр где кнопка уже не кнопка а просто нарисованный объект (вдавленный)

тоже самое можно и с гифами, но не целесообразно

Chay
14.01.2010, 16:14
Type button. Скопировал нажатую кнопку DOWN. Создал новый теперь уже movie clip. Положил скопированное изображение. Ctrl-enter но ничего не вышло. Может не совсем понял, поясните, пожалуйста: «и пихаете в кадр вместо кнопки на которую нажимали неактивным объектом». Наверно, что-то делаю не совсем правильно, у меня в новом клипе нет кадров up/over/down/hit, чтобы иметь отдельный кадр, так как это теперь не кнопка, а мувиклип. В общем по разному пробую, пока не получается. В случае если делаю отдельный layer в режиме редактирования кнопки, получается нажатое изображение и только звук при нажатии, анимация пропала (да, кстати, у меня кнопка со audio, может в этом причина…) если же создаю слой в основном окне, кадры закручиваются, мигают. Но эти оба варианта изначально неверны : ( как быть?

Отдельный вопрос: какие файлы для кнопок лучше импортировать во flash, если рисую не в самом флеше ?

Заранее благодарю

McW
14.01.2010, 17:52
я понял.. сделайте следующим образом
создайте 2 мувиклипа.
1) с дорожкой аудио
а) в мувике вставлена дорошка аудио с 2 кадра
б) первый кадр оставте пустым и поставте на нём 'stop'
в) назовите 2 кадр audioplay
г) вытащите из библиотеке мувик с аудио внутри и назовите его audio2) с анимацией кнопки.
лучше рисовать кнопку во флэше для простоты.
но рассмотрим ваш вариант.
а) Мувик с анимацией кнопки: 1 кадр -рисунок обычная кнопка
2 кадр -рисунок мышка на кнопке
3 кадр -рисунок вдавленной кнопки
б) На каждом кадре позиции кнопки поставте в акшине "stop"
в) присвойте каждому кадру кнопки имена b1, b2, b3
г) в кнопке присваиваем следующий код.

on (release) {
_root.audio.gotoAndPlay("audioplay");
}
on (rollOver) {
gotoAndPlay("b2");
}
on (rollOut) {
gotoAndPlay("b1");
}
on (release) {
gotoAndPlay("b3");
}

объясняю код:
1 - если нажать кнопку. он стартует звук в мувике Аудио с кадра который вы назвали АудиоПлэй.
2 - если вы навели мышь на кнопку. он показывает кадр b2
3 - если вы свели мышь с кнопки он показывает кадр b1
4 - если вы нажали он показывает кадр b3

Chay
14.01.2010, 21:13
Все кажется понятно, но у меня обстановка такая, видимо я не совсем точно объяснил суть. Мне нужно чтобы было так:

1. Up. Не нажатая кнопка (b1) - картинка выдавленная
2. Over. Мышка над кнопкой (b1) - ничего не меняется, тот же кадр (up и over - одна картинка, один фрейм)
3. Down. Нажатие (b2) - картинка вдавленная (кейфрейм, включается аудио, переход на другую страницу)
4. Отпускаем (b2) - картинка вдавленная (!! момент истины, главный момент !!)

Сделано так, всего два кадра (b1) и (b2). Одна картинка b1 находится в одном фрейме на два кадра up-b1 и over-b1 потом идет нажатие - кейфрейм down-b2 и вот здесь нужно, чтобы, когда я нажимаю и затем отпускаю кнопку, на кнопке останавливалось изображение b2 после чего загружается залинкованая HTML страница, где уже на месте флеш кнопки находится картинка вдавленной кнопки (ну последнее сейчас совершенно неважно, к этому можно еще добавит что изначально кнопку собрал в ActionScript2.0 так как 3.0 возникла проблема с getURL). В общем нужно, чтобы после того как нажал и отпустил, оставался тот же кадр что и при нажатии, кадр b2. Этот момент выдавливания виден во время перехода и получается так: вдавилась-выдавилась-вдавилась - не годится. По сути, проблема в том, что моя анимация loop, а нельзя как-то остановить на последний кадр, после того как нажал и отпустил? Много пробовал, но все варианты безрезультатно, то глохнет, то виснет, то loop-ит при наведении мауса, словом ничего хорошего :( подскажите, где, что и как правильно писать, чтобы все заработало. Внизу все что пытался сделать с остановкой. b2 это фрейм с картинкой, который нужно остановить или показать в конце клипа после нажатия. Назвал в окне редактирования frame label и instance name (тут пожалуй путаюсь, но в любом случае пробовал по-всякому).

on(press)
{
stop("b2");
}

on(release)
{
stop("b2");
}

on (press) {
gotoAndStop("b2");
}

on (release) {
gotoAndStop("b2");
}


Со скриптом мудрил отчасти исходя из вашего кода, отчасти из этого урока, хотя здесь речь не о кнопке:

Создайте анимацию движения и просмотрите ролик. Буквы действительно постепенно проявляются, однако, проявившись, тут же опять исчезают, поскольку после последнего кадра снова воспроизводится первый. А нам нужно, чтобы, доиграв до последнего кадра, ролик остановился. Откройте папку Actions (Действия) в левой части окна, найдите в ней оператор stop и дважды щелкните на нем. В правой части окна появится код: stop ();

KiL33
15.01.2010, 11:25
import mx.transitions.Tween;

var pressed:MovieClip = null;
var btn_mc:MovieClip;
var txt_mc:TextField;
var id_btn:Number;

for (var i:Number = 0; i<5; i++) {
btn_mc = createEmptyMovieClip("btn"+i, i);
txt_mc = btn_mc.createTextField("txt", i, 0, 0, 0, 0);
btn_mc._alpha = 50
txt_mc.autoSize = true;
txt_mc.text = "Button"+i;
btn_mc._x = 100;
btn_mc._y = 30*i;
with (btn_mc) {
beginFill(0x544E8F);
moveTo(0,0);
lineTo(50,0);
lineTo(50,20);
lineTo(0,20);
lineTo(0,10);
endFill();
}
btn_mc.onRollOver = function() {
new Tween(this, "_alpha", mx.transitions.easing.Regular.easeOut, 50, 100, 0.5, true);
new Tween(this, "_alpha", mx.transitions.easing.Regular.easeOut, 50, 100, 0.5, true);
};
btn_mc.onRollOut = function() {
new Tween(this, "_alpha", mx.transitions.easing.Regular.easeOut, 100, 50, 0.5, true);
new Tween(this, "_alpha", mx.transitions.easing.Regular.easeOut, 100, 50, 0.5, true);
};
btn_mc.onPress = function() {
_root.pressed.enabled = true;
_root.pressed.onRollOut();
this.enabled = false;
_root.pressed = this;
};
}

Chay
15.01.2010, 21:14
Нужно чтобы анимация кнопки остановилась на нужном кадре после нажатия. У меня кнопка из 2-ух gif-ов. Поясните пожалуйста, что здесь к чему, и что с этим кодом делать, как это может мне пригодиться, как применить, что добавить, что убрать? а то я совсем запутался. В языке, да и во флеше я пока мало, что знаю. Пробовал с этим кодом тоже (вернее на основе поковырялся) но что-то не вяжется, впрочем, мне здесь ошибиться легко. Конечно и на этом спасибо, но пока проблема актуальна, очень нужно, пока не сдаюсь :) :(

Chay
21.01.2010, 20:04
Всем спасибо за помощь! Спасибо bogoos Тема исчерпана. Проблема решина так, может кому-нибудь понадобится:

1. Создаем movie clip
4. в первый кадр этого символа pic1
5. создаем еще один слой
6. в первом кадре этого слоя скрипт: stop();
7. во второй кадр слоя с картинкой вставляем звук
8. во второй кадр со скриптом пишем stop();
9. в третий кадр с картинками вставляем вторую картинку
10. в третий кадр с скриптом пишем stop();
11. выходим в сцену
13. символ перетаскиваем в 1 кадр сцены
14. даем этому символу инстанс нейм
15. в сцене делаем второй слой
16. в первом слое только созданного кадра пишем код

имясимвола.onPress = function()
{
имясимвола.gotoAndStop(2)
}
имясимвола.onRelease = function ()
{
имясимвола.gotoAndStop(3)
}