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

LanSelven 12.09.2009 19:21

Обращения к элементам второго фрейма
 
Такая проблема, если кнопка находиться на первом фрейме внутри мувика то ее легко использовать:
Код AS1/AS2:

 Mc.btn.onRelease = function() {
}

Но если кнопка находиться на остальных фреймах, скажим на втором, то просто так к ней обратиться не получаеться, подозреваю что нужно использовать в имени путь к кадру или как-нибудь так О_о
Подскажите пожалйста.

mooncar 12.09.2009 19:46

По существу: нет, не так, к кадру обратиться нельзя, ролик туда может только перейти - сам в процессе воспроизведения или через gotoAndStop или gotoAndPlay.
Вам следует следить за тем, чтобы размещать кнопки и мувики там, где для них написан код. Нет ничего проще - сделайте слой, общий для всего ролика и разместите там элементы навигации.
При этом если в какой-то момент кнопка на сцене не нужна, задавайте ей _visible=false, а в нужных кадрах - проявляйте.
Что вам мешает написать код во втором фрейме, кстати?

Не очень понятна ситуация, зачем вам обращаться к кнопке, которой еще нет на сцене? :)
Или вам нужно просто выполнить действие, которое завязано на кнопке, то есть нажать ее программно?

LanSelven 12.09.2009 20:51

Вложений: 1
Вы меня немного не поняли, мувик уже есть, а кнопка скрыта с мувике, когда она появляется, нужно использовать условие, нажав на кнопку.
Вот пример:
Мувиклип, первый кадр пустой, а на втором кнопка, понятное дело что сначала надо перейти к фрейму с кнопкой, ну это не трудно сделать с помощью Mc.goto, однако кнопка всеровно не реагирует. Этой кнопке надо дать задание, причем код к кнопке должен быть на главной рабочей школе.
Вот скажем, мы переключили мувиклив на 2 фрейм и кнопка появлюсь на сцене, нужно сделать так, чтобы при нажатии выполнялось какое-нибудь действие, ну например trace("text");
Код AS1/AS2:

 Mc.btn.onRelease = function() {
    trace("text");
}

на первый взгляд простое дело но вся проблема во Мувиклипе, а точнее в том что находясь на второстепенных фреймах мувиклипа кнопка не запускается и не понимаю почему, так как в главной рабочей шкале такой проблемы не возникает.
А вообще задумка была в том, чтобы кнопка появлялась по какому-нибудь событию, на нее можно было нажать и она опять исчезла. И _visible я ей тоже не могу задать, так как не могу обратиться к ней впринцепи....
Ну, вот для наглядности flash документик.

mooncar 12.09.2009 20:56

Пересохраните для CS3, помните, что CS4 установлен не у всех.
Чувствую я, у вас всё там совсем с ног на голову...

LanSelven 12.09.2009 21:32

Вложений: 1
Вот та же флешка во Flash 8

mooncar 12.09.2009 21:42

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

Добавлено через 7 минут
Она же у вас все равно видимой сразу делается, для чего нужен второй кадр?

LanSelven 12.09.2009 21:55

Ну вы даете... Я же вам четко объяснил что мне нужно. Во флешке просто наглядный пример.
Мне нужно просто чтобы кнопка появилась в связи с каким-нибудь действием, а потом могла снова исчезнуть(Это можно сделать перемещая кнопку, но это плохой тон)
Так вы знаете как обратиться к элементу второстепенного фрейма? Или как можно проделать появление и исчезновение кнопки.

mooncar 12.09.2009 22:03

Нужно, чтобы на момент назначения на события кнопки функций, кнопка как-то реально присутствовала на сцене, а у вас внутри Mc2 - первый кадр пустой.
Вариант 1. Ставим в первый кадр любой мувик с альфа = 0;
Вариант 2. Убираем второй кадр и оставляем один кадр, все равн кнопка сразу же делается видимой.

Вариант 3. Пишем функцию для выполнения в корне:

Код AS1/AS2:

function Mc2Release() {
 blink.gotoAndPlay(2) //просто наглядное действие
}

Внутри Mc2 - во втором кадре, где появляется сама кнопка, пишем ссылку на объявленную в _root функцию:
Код AS1/AS2:

btn.onRelease = _root.Mc2Release;

3 вариант - наиболее толерантен к имеющейся структуре (менять ничего не нужно, только код вписать)

Добавлено через 15 минут
А "даю" я .. просто не организовывают так как у вас. Много ненужный проблем исчезает при правильном построении ролика..
Я же говорил: сделайте слой, общий для всего ролика и разместите там элементы навигации. И управляйте ими как хотите - через _visible и _alpha сообразно вашим событиям.
Я делаю так. Например, чтобы кнопка сперва не была видна сразу, в среде разработки, в свойствах, я ставлю ей alpha на 0%, в коде пишу _visible = false или enabled = false;
Затем в нужный момент программно включаю
Код AS1/AS2:

btn._alpha = 100;
btn._visible = true ;

Вот вам живой пример из проекта:

Код AS1/AS2:

// ф-я управления кнопками сохранить, отменить;
function manageCancelBut (dir) {       
        switch (dir) {
        case 'on':
        cancel_btn.enabled = true;       
        cancel_btn._alpha = 100;       
        break ;
        case 'off':
        cancel_btn.enabled = false  ;
        cancel_btn._alpha = 0;       
        break ;               
        }
};
function manageSaveBut (dir) {       
        switch (dir) {
        case 'on':
        saveData_btn.enabled = true ;       
        saveData_btn._alpha = 100;       
        break ;
        case 'off':
        saveData_btn.enabled = false ;
        saveData_btn._alpha = 0;       
        break ;               
        }
};

В начале кода у меня на _root у меня выключается все:
Код AS1/AS2:

manageSaveBut('off');
manageCancelBut('off');

При этом альфа в авторской среде выставлена на 0%, чтобы не было первоначального мигания, при выключении, а кнопки были невидимы сразу.
А потом, когда нужно, я их проявляю:
Код AS1/AS2:

_root.manageCancelBut('on');

То есть вызываю из абсолютно любого места ролика.
Естественно все onRelease и прочее прописаны на _root сразуи прекарсно работают.

LanSelven 12.09.2009 22:20

Ну, 3 способ равно силен тому, что я задам действие прямо кнопке
Код AS1/AS2:

on(release) {}

Не удобный способ...Мне нужно будет сделать таких кнопок окола 50 штук, и я хотел весь код уместить лишь на главной рабочей школе.
Не понял как делать "Вариант 1"
Вариант 2 не подходит. Я же вам говорил, то что кнопка сразу же делаеться видемой это ВАМ для наглядного примера "т.е нажал на первую - работает, на вторую - нет" в реалльной обстановке она появлится лиш когда например coose будет true, или когда на какой-нибудь кнопке сработает действиет
Код AS1/AS2:

Mc.gotoAndStop(2)


mooncar 12.09.2009 22:22

См. пример выше. пользуйтесь подготовленными функциями, это даст вам гибкость.


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

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