В общем проблема такого плана. Решил освоить ООП, т.к. даже при создании простеньких интерфейсов начинаешь тонуть в коде, когда пишешь его покадрово. Столкнулся с тем, что из кода классов не всегда удается обращаться к объектам созданным вручную и именованных на закладке "Свойства". Вот пример из Мука - класс формы авторизации. Создал символ мувиклип - в нем набрал формочку для ввода логина и пароля, на нее кинул текст, 2 редактируемых текстовых поля TLFTextField и кнопку Submit_btn. Затем создал класс LoginForm, привязал его к мувику:
package
{
import flash.display.*;
import flash.text.*;
import flash.events.*;
import fl.text.TLFTextField;
public class LoginForm extends MovieClip
{
public var login:TLFTextField = new TLFTextField ();
public var password:TLFTextField = new TLFTextField ();
public var submit_btn:SimpleButton;
public function LoginForm()
{
// constructor code
password.displayAsPassword = true; // здесь должна быть маскировка //пароля, но у меня она не сработала
submit_btn.addEventListener(MouseEvent.CLICK, submitListener);
}
private function submitListener(e:MouseEvent):void
{
submit(login.text, password.text);
}
public function submit (name:String, pass:String):void {
trace ("Проходим идентификацию " + name + " с паролем " + pass);
/*Здесь должен быть код отправки данных на сервер*/
}
}
}
т.е. объекты кинутые в кадр визуально, объявляются в коде с теми же именами. У Мука есть рекомендация при этом отключать в настройках экшнскрипта 3.0 опцию "Автоматически объявлять экземпляры в рабочей области", но она по моему и так не работает, по крайней мере не для всех компонентов. Приведенный код работает, более того я его прикрепил к двум мувикам с разной цветовой гаммой формы (просто вписал базовый класс для мувиков LoginForm, флеш автоматически создала 2 дочерних класса по именам мувиков) - обе формы работают на одном кадре.
Затем я попытался усложнить пример и тут опять начались непонятки. Написал класс документа с кнопкой переключения между кадрами (кнопку тоже создал визуально):
package {
import flash.display.MovieClip;
import flash.events.*;
import flash.display.*;
public class UseLoginForm extends MovieClip {
public var change_btn:SimpleButton;
public var Login1:LoginFormStile_1 = new LoginFormStile_1 ();
public var Login2:LoginFormStile_2 = new LoginFormStile_2 ();
public function UseLoginForm() {
// constructor code
this.stop();
change_btn.addEventListener (MouseEvent.CLICK, onChangeClick);
}
public function onChangeClick (e:MouseEvent):void {
this.gotoAndStop (2);
}
}
}
Это одна из версий кода, над ним я долго экспериментировал, но смысл в том, что держать экземпляры форм авторизации на разных кадрах у меня не получается, выкидывается ReferenceError, либо хотя бы 1 форма не работает (в данном примере не работает форма 1 на первом кадре). Почему - я не понимаю, было бы интересно узнать мнение опытных флешеров. |
Не понял,а почему мой вопрос вечный?