EndoCrinologist |
31.01.2016 00:48 |
Как осуществить простейший переход от одного "экрана" к другому?
Есть у меня класс 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 минут
Решил удалять по индексу...
|