![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2014
Сообщений: 2
|
Добрый день/вечер. Есть проблема, которую кроме как тёмной магией не могу назвать.
Первая флешка идеально работает, если её просто скомпилить и запустить. Но стоит загрузить её из предзагрузчика, как начинаются чудеса. Сообщения ошибок выдают что в объекте не находятся свойства, хотя это ФУНКЦИИ, а не свойства и они там точно есть! Так как иначе бы не работало без предзагрузчика. Ниже один из классов, из которого летят выстрелы. (Листинг2) Стреляет вот эта функция класса - public function doInput (myVal:Boolean). Выходит ошибка времени исполнения 1069, которая вещает мне что класс Widget.RoundTextBtn не содержит СВОЙСТВА doInput. Повторюсь - это только если файл запущен через предзагрузчик. Вызов происходит так (Листинг1) MyLogin - объявлена выше в классе. private var MyLogin:RoundTextBtn = null; // Логин игрока Если кто знает в чём может быть дело - помогите плиз. В проекте уже десятки тысяч строк кода, но такую ошибку, с которой не смог справится - встретил впервые... (Листинг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)); } (Листинг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; } /****************************************************/ } } В конце я даже прицепил интерфейс к классу. Но всё равно ошибка такая 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] Новый листинг класса с интерфейсом 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); } Проблема была в дублировании классов. В предзагрузчике были ТАКИЕ же классы в том же пакете, но они отличались содержимым. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|