|
|
|||||
Регистрация: Mar 2008
Сообщений: 6
|
Вызов метода другого класса.
Простите за тупой вопрос. До этого с 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 внутри метода доступа нет. Как только не извращался методом тыка, читал документацию, но понять сакральный смысл этой проблемы не могу. Как это можно сделать?. |
|
|||||
ветеран форума
|
ну во-первых, экземпляр myButtton должен как-то получать ссылку на экземпляр myButton2, и затем уже у этого экземпляра нужно менять свойства/вызывать методы. Для примера, в Document Class подписываемся на нужный event myButton-а, и по нему вызываем нужное действие в myButton2.
P. S. Имена классов должны начинаться с большой буквы
__________________
4am is time to rock |
|
|||||
Регистрация: 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() недоступна. } } } >P. S. Имена классов должны начинаться с большой буквы 0_o. UPD: Хм. Походу я очень затупил посчитав что main.myButton2 возвращает созданный в рантайме экземпляр класса. UPD2: Все, вспомнил что значит статик в сях, понял свою ошибку, спасибо). Последний раз редактировалось n0uk; 01.03.2008 в 03:07. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
n0uk, во AS нет ни одного класса, чье имя начинается c маленькой буквы. А ваши кастомные почему-то как раз такие. Почему?
|
|
|||||
Регистрация: Mar 2008
Сообщений: 6
|
потому что это привычка). А то что в АС это плохой тон, я не знал).
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Это плохой тон также и в других ECMAScript-языках. В Java в т.ч.
|
|
|||||
strange mood
|
В разах примерно так
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, время: 09:25. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|