Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблемы с видимостью функции после предзагрузчика (http://www.flasher.ru/forum/showthread.php?t=206195)

Lokis 19.01.2014 00:57

Проблемы с видимостью функции после предзагрузчика
 
Добрый день/вечер. Есть проблема, которую кроме как тёмной магией не могу назвать.
Первая флешка идеально работает, если её просто скомпилить и запустить. Но стоит загрузить её из предзагрузчика, как начинаются чудеса. Сообщения ошибок выдают что в объекте не находятся свойства, хотя это ФУНКЦИИ, а не свойства и они там точно есть! Так как иначе бы не работало без предзагрузчика. Ниже один из классов, из которого летят выстрелы. (Листинг2) Стреляет вот эта функция класса - public function doInput (myVal:Boolean). Выходит ошибка времени исполнения 1069, которая вещает мне что класс Widget.RoundTextBtn не содержит СВОЙСТВА doInput. Повторюсь - это только если файл запущен через предзагрузчик. Вызов происходит так (Листинг1)
MyLogin - объявлена выше в классе.
private var MyLogin:RoundTextBtn = null; // Логин игрока

Если кто знает в чём может быть дело - помогите плиз. В проекте уже десятки тысяч строк кода, но такую ошибку, с которой не смог справится - встретил впервые...

Код AS3:

(Листинг1)
try {
        MyLogin = new RoundTextBtn(0, 0, 0.25*W - 4, 28, 5, 0xFFFFFF, false, 18, false);
        MyLogin.x = MySkillMenu.x + MySkillMenu.width + 0.2*W;
        MyLogin.y = ChangeLogin.y - 0.05*H;       
        MyLogin.doInput(true);       
        addChild(MyLogin);                                                                               
        NickTimer.addEventListener(TimerEvent.TIMER_COMPLETE, CanAgainChange);                                                                               
}
catch (err:Error){                               
        addChild(new ErrorWindow(20, 20, "PlMenuClass -  MyLogin", err.toString() + err.getStackTrace(), 500, 500, 18, 12));
}

Код AS3:

(Листинг2)
package Widget
{
        import flash.display.*;
        import flash.text.TextFieldType;
        import flash.events.MouseEvent;       
        import flash.events.Event;
        import flashx.textLayout.formats.BackgroundColor;
        import Widget.TextMes;
        import Widget.RoundSprite;
 
        public class RoundTextBtn extends Sprite
        {
                private var MytextMes:Widget.TextMes;                // Текст на кнопке
                private var MyMask:Sprite = new Sprite();        // маска               
                private var BorderLay:RoundSprite;                        // Первый слой - рамку делает
                private var W:int;
                private var H:int;
                private var radius:int;               
                private var borderfit:int;                                        // толщина рамки
                private var light:Boolean;
 
                public function RoundTextBtn (X:Number = 0, Y:Number = 0, W:uint = 200, H:uint = 22, radius:uint = 5,
                                                                            myColor:int = 0xB7AF97, ChangeColor:Boolean = true, mytextSize:int = 15,
                                                                      bold:Boolean = false, mytextColor:int = 0x000000,
                                                                          borderfit:int = 2, borderColor:int = 0x8B4513, doAutoSize:Boolean = true)
                {                       
                        this.x = X; this.y = Y;       
                        this.W = W; this.H = H; this.radius = radius;                       
                        this.borderfit = borderfit;
                        light = ChangeColor;
 
                        BorderLay = new RoundSprite(W + 2*borderfit, H + 2*borderfit, borderColor, radius);
                        addChild(BorderLay);
                        createBorder (myColor, borderfit);
 
                        MytextMes = new TextMes(0, 0, W*0.9, H*0.9, mytextSize, myColor, false, false, false, bold, false, mytextColor, doAutoSize, false, "");                       
                        MytextMes.x = 0.5*(this.width - MytextMes.width);
                        MytextMes.y = 0.5*(this.height - MytextMes.height);
                        addChild(MytextMes);       
 
                        MyMask.graphics.beginFill(0x0000ff);
                        MyMask.graphics.drawRoundRectComplex(0, 0, W + 2*borderfit, H + 2*borderfit, radius, radius, radius, radius);
                        MyMask.graphics.endFill();
                        addChild(MyMask);
                        this.mask = MyMask;                                       
 
                        addEventListener(MouseEvent.MOUSE_OVER, MoreLighth);
                        addEventListener(MouseEvent.MOUSE_OUT,  NormalLighth);
                }
                /****************************************************/
                public function changeAlign (align:String) {
                        MytextMes.changeAlign("L");
                }
                /****************************************************/
                public function doInput (myVal:Boolean) {
                        try {
                                MytextMes.type = TextFieldType.INPUT;
                                MytextMes.selectable = myVal;                               
                        }
                        catch (err:Error){                               
                                parent.addChild(new ErrorWindow(200, 200, "setInput", err.toString() + err.getStackTrace(), 400, 500, 20, 15));
                        }               
                }
                /****************************************************/
                public function setBackgroundColor (color:int) {
                        this.graphics.beginFill (color, 1);                        // Задаём цвет и прозрачность
                        this.graphics.drawRect(0, 0, W + 2*borderfit, H + 2*borderfit);                        // Задаём область заливки
                        this.graphics.endFill();                                        // Выполняем заливку       
                }
                /****************************************************/
                public function SetText (myText:String) {
                        MytextMes.SetText(myText);
                        MytextMes.x = 0.5*(this.width - MytextMes.width);
                        MytextMes.y = 0.46*(this.height - MytextMes.height);                       
                }
                /****************************************************/
                public function getText () : String {
                        var tmp:String = new String(MytextMes.text);
                        return tmp;
                }
                /****************************************************/
                public function setBorder (isborder:Boolean) {
                        BorderLay.visible = isborder;
                }
                /****************************************************/
                private function createBorder (myColor:int, borderfit:int) {
                        var fill:RoundSprite = new RoundSprite(W, H, myColor, radius);
                        fill.x = borderfit; fill.y = borderfit;
                        addChild(fill);
                }
                /****************************************************/               
                private function MoreLighth (event:MouseEvent) {
                        if (light) alpha = 0.5;
                }
                /****************************************************/
                private function NormalLighth (event:MouseEvent) {
                        if (light) alpha = 1;
                }       
                /****************************************************/
        }       
}

Добавлено через 12 часов 17 минут
В конце я даже прицепил интерфейс к классу. Но всё равно ошибка такая
ReferenceError: Error #1069: Не удалось найти свойство doInput в Widget.RoundTextBtn; отсутствует значение по умолчанию.ReferenceError: Error #1069: Не удалось найти свойство doInput в Widget.RoundTextBtn; отсутствует значение по умолчанию.
at PlMenuFolder::PlMenuClass/createLoginChange()[C:\Documents and Settings\Flash_projects\FootBall\PlMenuFolder\PlMenuClass.as:147]
at PlMenuFolder::PlMenuClass()[C:\Documents and Settings\Flash_projects\FootBall\PlMenuFolder\PlMenuClass.as:45]
at Base::AllMenuCabinet/createMenus()[C:\Documents and Settings\Flash_projects\FootBall\Base\AllMenuCabinet.as:109]
at Base::AllMenuCabinet/CreateMainMenu()[C:\Documents and Settings\Flash_projects\FootBall\Base\AllMenuCabinet.as:88]
at Base::AllMenuCabinet()[C:\Documents and Settings\Flash_projects\FootBall\Base\AllMenuCabinet.as:76]

Новый листинг класса с интерфейсом
Код AS3:

package Widget
{
        import flash.display.*;
        import flash.text.TextFieldType;
        import flash.events.MouseEvent;       
        import flash.events.Event;
        import flashx.textLayout.formats.BackgroundColor;
        import Widget.TextMes;
        import Widget.RoundSprite;
 
        public class RoundTextBtn extends Sprite implements RounBtnInterface
        {
                private var MytextMes:Widget.TextMes;                // Текст на кнопке
                private var MyMask:Sprite = new Sprite();        // маска               
                private var BorderLay:RoundSprite;                        // Первый слой - рамку делает
                private var W:int;
                private var H:int;
                private var radius:int;               
                private var borderfit:int;                                        // толщина рамки
                private var light:Boolean;
 
                public function RoundTextBtn (X:Number = 0, Y:Number = 0, W:uint = 200, H:uint = 22, radius:uint = 5,
                                                                            myColor:int = 0xB7AF97, ChangeColor:Boolean = true, mytextSize:int = 15,
                                                                      bold:Boolean = false, mytextColor:int = 0x000000,
                                                                          borderfit:int = 2, borderColor:int = 0x8B4513, doAutoSize:Boolean = true)
                {                       
                        this.x = X; this.y = Y;       
                        this.W = W; this.H = H; this.radius = radius;                       
                        this.borderfit = borderfit;
                        light = ChangeColor;
 
                        BorderLay = new RoundSprite(W + 2*borderfit, H + 2*borderfit, borderColor, radius);
                        addChild(BorderLay);
                        createFill (myColor, borderfit);
 
                        MytextMes = new TextMes(0, 0, W*0.9, H*0.9, mytextSize, myColor, false, false, false, bold, false, mytextColor, doAutoSize, false, "");                       
                        MytextMes.x = 0.5*(this.width - MytextMes.width);
                        MytextMes.y = 0.5*(this.height - MytextMes.height);
                        addChild(MytextMes);       
 
                        MyMask.graphics.beginFill(0x0000ff);
                        MyMask.graphics.drawRoundRectComplex(0, 0, W + 2*borderfit, H + 2*borderfit, radius, radius, radius, radius);
                        MyMask.graphics.endFill();
                        addChild(MyMask);
                        this.mask = MyMask;                                       
 
                        addEventListener(MouseEvent.MOUSE_OVER, MoreLighth);
                        addEventListener(MouseEvent.MOUSE_OUT,  NormalLighth);
                }
                /****************************************************/
                public function changeAlign (align:String) {
                        MytextMes.changeAlign("L");
                }
                /****************************************************/
                public function doInput (myVal:Boolean) : void {
                        try {
                                MytextMes.type = TextFieldType.INPUT;
                                MytextMes.selectable = myVal;                               
                        }
                        catch (err:Error){                               
                                parent.addChild(new ErrorWindow(200, 200, "setInput", err.toString() + err.getStackTrace(), 400, 500, 18, 12));
                        }               
                }
                /****************************************************/
                public function setBackgroundColor (color:int) {
                        this.graphics.beginFill (color, 1);                        // Задаём цвет и прозрачность
                        this.graphics.drawRect(0, 0, W + 2*borderfit, H + 2*borderfit);                        // Задаём область заливки
                        this.graphics.endFill();                                        // Выполняем заливку       
                }
                /****************************************************/
                public function SetText (myText:String) {
                        MytextMes.SetText(myText);
                        MytextMes.x = 0.5*(this.width - MytextMes.width);
                        MytextMes.y = 0.46*(this.height - MytextMes.height);                       
                }
                /****************************************************/
                public function getText () : String {
                        var tmp:String = new String(MytextMes.text);
                        return tmp;
                }
                /****************************************************/
                public function setBorder (isborder:Boolean) {
                        BorderLay.visible = isborder;
                }
                /****************************************************/
                private function createFill (myColor:int, borderfit:int) {
                        var fill:RoundSprite = new RoundSprite(W, H, myColor, radius);
                        fill.x = borderfit; fill.y = borderfit;
                        addChild(fill);
                }
                /****************************************************/               
                private function MoreLighth (event:MouseEvent) {
                        if (light) alpha = 0.5;
                }
                /****************************************************/
                private function NormalLighth (event:MouseEvent) {
                        if (light) alpha = 1;
                }       
                /****************************************************/
        }       
}
 
/****************************************************************************/
 
interface RounBtnInterface
{
        function doInput (myVal:Boolean) : void;
        function getText () : String;
        function setBorder (isborder:Boolean);
        function changeAlign (align:String);
        function setBackgroundColor (color:int);
        function SetText (myText:String);
}

Добавлено через 18 часов 45 минут
Проблема была в дублировании классов. В предзагрузчике были ТАКИЕ же классы в том же пакете, но они отличались содержимым.


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

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