Добрый день/вечер. Есть проблема, которую кроме как тёмной магией не могу назвать.
Первая флешка идеально работает, если её просто скомпилить и запустить. Но стоит загрузить её из предзагрузчика, как начинаются чудеса. Сообщения ошибок выдают что в объекте не находятся свойства, хотя это ФУНКЦИИ, а не свойства и они там точно есть! Так как иначе бы не работало без предзагрузчика. Ниже один из классов, из которого летят выстрелы. (Листинг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 минут
Проблема была в дублировании классов. В предзагрузчике были ТАКИЕ же классы в том же пакете, но они отличались содержимым.