Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 19.01.2014, 00:57
Lokis вне форума Посмотреть профиль Отправить личное сообщение для Lokis Найти все сообщения от Lokis
  № 1  
Ответить с цитированием
Lokis

Регистрация: Jan 2014
Сообщений: 2
По умолчанию Проблемы с видимостью функции после предзагрузчика

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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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