Показать сообщение отдельно
Старый 31.01.2016, 00:48
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 1  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
По умолчанию Как осуществить простейший переход от одного "экрана" к другому?

Есть у меня класс Main, который при загрузке флешки подключает класс IntroPage, где изначальная текстовая заставка.. После клика в любом через IntroPage в Main происходит вызов функции:
Код AS3:
public function changePage_toEnterName():void
{
	while (numChildren) removeChildAt(0);
	var enterName:EnterName = new EnterName;
	addChild(enterName);
}
В классе EnterName юзер вводит свое имя. Это имя я хочу отобразить на верхней панели, которая находится в классе UpPanel. При нажатии на Enter после того, как юзер закончил вводить имя, оно должно отобразиться на ней в текстовом поле на панели UpPanel. Но этого не происходит, так как у меня все функции перехода от экрана к экрану содержат это:
Код AS3:
while (numChildren) removeChildAt(0);
Такой вопрос.. Как мне грамотно осуществлять переходы?
Вот такой метод мне не подошел:
Код AS3:
private function init(e:Event = null):void 
{
	removeEventListener(Event.ADDED_TO_STAGE, init);
 
	var introPage:IntroPage = new IntroPage;
	addChild(introPage);
}
Потому что в IntroPage такая вот строка
Код AS3:
tf.width = Main.THIS.stage.stageWidth;
вызывает ошибку доступа к свойству.

Не знаю, что делать.. Может посоветуете литературу какую-нибудь, которая учит мыслить классово?

На всякий случай привожу коды классов.
MAIN
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author Volodin A.S.
	 */
	public class Main extends Sprite 
	{
		public static var THIS:Main = null;
 
		private var USER_NICK:String = '';
 
		public var upPanel:UpPanel = new UpPanel;
 
		public function Main():void
		{
			THIS = this;
 
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			var introPage:IntroPage = new IntroPage;
			addChild(introPage);
		}
		public function changePage_toEnterName():void
		{
			while (numChildren) removeChildAt(0);
 
			var enterName:EnterName = new EnterName;
			addChild(enterName);
		}
 
		public var connectServer:ConnectServer = new ConnectServer;
		public function changePage_toConnectServer():void
		{
			while (numChildren) removeChildAt(0);
			addChild(connectServer);
		}
 
		public function setUserNick(nick:String):void
		{
			this.USER_NICK = nick;
		}
 
	}
 
}
INTROPAGE
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	/**
	 * ...
	 * @author Volodin A.S.
	 */
	public class IntroPage extends Sprite
	{
 
		public function IntroPage() 
		{
 
			var ttf:TextFormat = new TextFormat;
			ttf.color = 0x000000;
			ttf.size = 30;
			ttf.align = TextFormatAlign.CENTER;
			ttf.font = 'Tahoma';
 
			var tf:TextField = new TextField;
			tf.defaultTextFormat = ttf;
			tf.text = 'PERSONS\nClick for continue...';
			tf.width = Main.THIS.stage.stageWidth;
			tf.mouseEnabled = false;
 
			var tf_halfHeight:Number = 0;
			tf_halfHeight = tf.height / 2;
			tf.y = Main.THIS.stage.stageHeight/2 - tf_halfHeight;
 
			addChild(tf);
 
			var spr:Sprite = new Sprite;
			spr.graphics.beginFill(0,0);
			spr.graphics.drawRect(0, 0, Main.THIS.stage.stageWidth, Main.THIS.stage.stageHeight);
			addChild(spr);
 
			spr.addEventListener(MouseEvent.MOUSE_UP, function (e:Event):void
			{
				Main.THIS.changePage_toEnterName();
			});
		}
 
	}
 
}
ENTERNAME
Код AS3:
package 
{
	import flash.events.KeyboardEvent;
	import flash.text.TextFieldType;
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.events.Event;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	/**
	 * ...
	 * @author Volodin A.S.
	 */
	public class EnterName extends Sprite
	{
		public static var THIS:EnterName = null;
 
		public function EnterName():void
		{
			THIS = this;
 
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			var ttf:TextFormat = new TextFormat;
			ttf.color = 0x000000;
			ttf.size = 30;
			ttf.align = TextFormatAlign.CENTER;
			ttf.font = 'Tahoma';
 
			var ttf_input:TextFormat = new TextFormat;
			ttf_input.color = 0x000000;
			ttf_input.size = 30;
			ttf_input.align = TextFormatAlign.CENTER;
			ttf_input.font = 'Tahoma';
 
			var tf:TextField = new TextField;
			tf.defaultTextFormat = ttf;
			tf.text = 'Enter your name here:';
 
			tf.width = Main.THIS.stage.stageWidth;
			tf.mouseEnabled = false;
 
			var tf_halfHeight:Number = 0;
			tf_halfHeight = tf.height / 2;
			tf.y = Main.THIS.stage.stageHeight/2 - tf_halfHeight/2;
			addChild(tf);
 
			var input:TextField = new TextField();
			input.defaultTextFormat = ttf_input;
			input.width = 300;
			input.height = 40;
			//input.y = 20;
			input.type = TextFieldType.INPUT;
			input.border = true;
 
			var input_halfWidth:Number = 0;
			input_halfWidth = input.width / 2;
			input.x = Main.THIS.stage.stageWidth/2 - input_halfWidth;
 
			var input_halfHeight:Number = 0;
			input_halfHeight = tf.height / 2;
			input.y = Main.THIS.stage.stageHeight/2 + input_halfHeight/2;
 
			addChild(input);
 
			stage.focus = input;	
 
 
			input.addEventListener(KeyboardEvent.KEY_UP, function(e:KeyboardEvent):void
			{
				var textField:TextField = e.target as TextField;
				var str:String = textField.text;
 
				if (e.keyCode == 13)
				{
					if (str.length > 3)
					{
						Main.THIS.setUserNick(input.text);
						Main.THIS.upPanel.setUserNamePanel(input.text);
						Main.THIS.changePage_toConnectServer();
					}
				}
			});
		}
 
	}
 
}
P.S. А тут есть спойлеры, чтобы сжать содержимое поста?

UPD.
Цитата:
Потому что в IntroPage такая вот строка
tf.width = Main.THIS.stage.stageWidth;
вызывает ошибку доступа к свойству.
Перепутал, не из-за этого. А из-за того, что к этой переменной
Код AS3:
var introPage:IntroPage = new IntroPage;
нет доступа и я не могу удалить его через removeChild().
А если как раз-таки сделать через public var - будет ошибка доступа

Добавлено через 28 минут
Решил удалять по индексу...
__________________
Надо сменить подпись...