Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.03.2008, 01:22
n0uk вне форума Посмотреть профиль Отправить личное сообщение для n0uk Найти все сообщения от n0uk
  № 1  
Ответить с цитированием
n0uk

Регистрация: Mar 2008
Сообщений: 6
Thumbs up Вызов метода другого класса.

Простите за тупой вопрос. До этого с AS/Flash не работал никогда но тут два дня назад пришлось.
Скачал Adobe Flash CS3 Trial, создал с горем пополам fla документ, забиндил на Document class , "main.test1" все работает.
Создал Symbol, привязал его к main.myButton, положил myButton.as в /main/, все работает. Создал еще один Symbol привязал его к main.myButton2.
И возникла проблема, надо по событию в myButton скрыть символ myButton2.
Если сделать метод ставящий visible = false в myButton2, его не видно из myButton. Если сделать его статическим, его видно, но к переменной visible внутри метода доступа нет. Как только не извращался методом тыка, читал документацию, но понять сакральный смысл этой проблемы не могу.
Как это можно сделать?.

Старый 01.03.2008, 02:27
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 2  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
ну во-первых, экземпляр myButtton должен как-то получать ссылку на экземпляр myButton2, и затем уже у этого экземпляра нужно менять свойства/вызывать методы. Для примера, в Document Class подписываемся на нужный event myButton-а, и по нему вызываем нужное действие в myButton2.

P. S. Имена классов должны начинаться с большой буквы
__________________
4am is time to rock

Старый 01.03.2008, 02:54
n0uk вне форума Посмотреть профиль Отправить личное сообщение для n0uk Найти все сообщения от n0uk
  № 3  
Ответить с цитированием
n0uk

Регистрация: Mar 2008
Сообщений: 6
>ну во-первых, экземпляр myButtton должен как-то получать ссылку на экземпляр myButton2, и затем уже у этого экземпляра нужно менять свойства/вызывать методы. Для примера, в Document Class подписываемся на нужный event myButton-а, и по нему вызываем нужное действие в myButton2.
>
>P. S. Имена классов должны начинаться с большой буквы
Они в пакете main, и допустим код
Код:
/main/myButton2.as
package main {
          public class myButton2 extends MovieClip {
                 ....
                 static public function hello() {
                       trace("Hello World!");
                 }
          }
}
/main/myButton.as
package main {
          public class myButton extends MovieClip {
                 ....
                 public function myButton() {
                       main.myButton2.hello();
                 }
          }
}
Выведет в аутпут приветствие к этому миру.
Однако проблема в том что

Код:
/main/myButton2.as
package main {
          public class myButton2 extends MovieClip {
                 ....
                 public function setVisible(vis_state:Boolean) {
                       visible=vis_state;
                 }
                 ....
                 public function myButton2() {
                       setVisible(false); // Все отработает, и символ скроется
                 }
          }
}

/main/myButton.as
package main {
          public class myButton extends MovieClip {
                 ....
                 public function myButton() {
                       main.myButton2.setVisible(true); // крикнет что метода setVisible у myButton2 нет. Однако там метод в паблике и это меня ужасно путает, т.к. я не понимаю чего-то by design.
                 }
          }
}
Второй вариант:
Код:
/main/myButton2.as
package main {
          public class myButton2 extends MovieClip {
                 ....
                 static public function setVisible(vis_state:Boolean) {
                       visible=vis_state; // Скажет что перменная visible недоступна. 
                 }
          }
}

/main/myButton.as
package main {
          public class myButton extends MovieClip {
                 ....
                 public function myButton() {
                       main.myButton2.setVisible(true); // скажет что переменная visible внутри метода main.myButton2.setVisible() недоступна.
                 }
          }
}
Извратился добавив в класс переменную static public vis_state:Boolean и таймер который следит за ее состоянием, заработало. Но это ужасный и нежелательный вариант естественно.

>P. S. Имена классов должны начинаться с большой буквы
0_o.

UPD:
Хм. Походу я очень затупил посчитав что main.myButton2 возвращает созданный в рантайме экземпляр класса.
UPD2:
Все, вспомнил что значит статик в сях, понял свою ошибку, спасибо).


Последний раз редактировалось n0uk; 01.03.2008 в 03:07.
Старый 01.03.2008, 10:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
n0uk, во AS нет ни одного класса, чье имя начинается c маленькой буквы. А ваши кастомные почему-то как раз такие. Почему?

Старый 01.03.2008, 11:42
n0uk вне форума Посмотреть профиль Отправить личное сообщение для n0uk Найти все сообщения от n0uk
  № 5  
Ответить с цитированием
n0uk

Регистрация: Mar 2008
Сообщений: 6
потому что это привычка). А то что в АС это плохой тон, я не знал).

Старый 01.03.2008, 11:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Это плохой тон также и в других ECMAScript-языках. В Java в т.ч.

Старый 02.03.2008, 00:49
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 7  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
В разах примерно так


Код:
package{

    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;

    //Document root class
    public class Main extends MovieClip{

        //Будем считать что автоматическое объявление отключено
        var btn1:SimpleButton;
        var btn2:SimpleButton;

        //constructor
        function Main(){
             this.btn1.addEventListener(MouseEvent.CLICK, this.btn1ClickHandler);
        }//constructor

        private function btn1ClickHandler(e:MouseEvent){
              this.btn2.visible=(!this.btn2.visible);
        }//btn1ClickHandler

    }//Main

}//package
__________________
тонкий тролль, осеянный благодатью

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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