![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Значит структура классов такова, из Controller в UI_Connection, из UI_Connection в UI_NewGame, но вопрос чуток в другом.
Смотрю на примере Комбобоксов. "из Controller в UI_Connection" - их нету на рабочей области, профайлер показывает, что их действительно нету в памяти, - все ок. Потом "из UI_Connection в UI_NewGame" - появились на сцене 3 комбобокса, профайлер показывает, что они есть - все ок. потом вот что делается в классе "UI_NewGame" - там кнопочка при нажатии на которую осуществляется коннект и передается управление классу Constructor который все удаляет и создает новый обьект. НО! Все элементы интерфейса лежат в памяти. Почему? Вот структура класса - там ничего сложного посмотрите пож package { import fl.controls.Button; import fl.controls.ComboBox; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.NetConnection; import flash.events.NetStatusEvent; import flash.text.TextField; import flash.utils.Timer; import flash.events.TimerEvent; /** * ... * @author webdev */ public class UI_NewGame extends MovieClip { private var anFrame:MaskFrame; private var cont:Sprite; private var btn_Create:Button; private var _uiConnection:UI_Connection; private var _controller:Controller; private var comboSpCount:ComboBox; private var comboSpStake:ComboBox; private var comboSpStartGeld:ComboBox; private var array:Array = new Array(3); private var netCon:NetConnection; private var _fmsConnection:FMS_Connect; private var urlName:String; private var appName:String; public function UI_NewGame(_uiConnection:UI_Connection, _controller:Controller, urlName:String, appName:String) { trace("<--UI_NewGame::UI_NewGame-->"); this._controller = _controller; this._uiConnection = _uiConnection; this.urlName = urlName; this.appName = appName; setInterface(); } private function setInterface():void { trace ("func___setInterface"); cont = new Sprite(); setFrame(); } private function setFrame():void { trace("func___setFrame"); this.anFrame = new MaskFrame(); this.addChild(this.cont); this.anFrame.x = 50; this.anFrame.y = 200; this.cont.addChild(this.anFrame); var timer:Timer = new Timer(1400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpCnt); } private function comboSpCnt(event:TimerEvent):void { trace("func___comboSpCount"); comboSpCount = new ComboBox(); this.comboSpCount.x = 125; this.comboSpCount.y = 217; comboLabel(100, 200, "Waehle die Anzahl der Spieler"); for (var i:int = 2; i <9; i++) { this.comboSpCount.addItem({label:i, data:i}); } this.cont.addChild(this.comboSpCount); var timer:Timer = new Timer (400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpSt); (event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpCnt); } private function comboSpSt(event:TimerEvent):void { trace("func___comboSpStake"); this.comboSpStake = new ComboBox(); this.comboSpStake.x = 125; this.comboSpStake.y = 352; comboLabel(100, 335, "Waehle den maximalen Einsatz $"); for (var i:int = 1; i <=10; i++) { this.comboSpStake.addItem({label:i, data:i}); } this.cont.addChild(this.comboSpStake); var timer:Timer = new Timer (400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpStGeld); (event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpSt); } private function comboSpStGeld(event:TimerEvent):void { trace("func___comboSpStartGeld"); this.comboSpStartGeld = new ComboBox(); this.comboSpStartGeld.x = 125; this.comboSpStartGeld.y = 482; comboLabel(100, 465, " $ Max"); for (var i:int = 1; i <=5; i++) { this.comboSpStartGeld.addItem({label:i, data:i}); } this.cont.addChild(this.comboSpStartGeld); var timer:Timer = new Timer (400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, btn_NewGame); (event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpStGeld); } private function btn_NewGame(event:TimerEvent):void { trace ("func___btn_NewGame"); this.btn_Create = new Button(); this.btn_Create.label = "Create"; this.btn_Create.x = 125; this.btn_Create.y = 620; this.cont.addChild(this.btn_Create); this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk); (event.target as Timer).removeEventListener(TimerEvent.TIMER, btn_NewGame); } private function comboLabel(_x:int, _y:int, str:String):void { trace ("func___comboLabel"); var label:TextField = new TextField(); label.x = _x; label.y = _y; label.textColor = 0xFFFFFF; label.width = 150; label.text = str; this.cont.addChild(label); } private function btn_Create_clk(event:MouseEvent):void { trace ("func___btn_Create_clk"); this._fmsConnection = new FMS_Connect(urlName, appName); this.netCon = this._fmsConnection.connecting(); this.netCon.addEventListener('netStatus', netStatusHandler); } private function netStatusHandler(event:NetStatusEvent):void { trace("func___netStatusHandler"); if (event.info.code == "NetConnection.Connect.Success") setConnected(); else _uiConnection.setError(); } private function setConnected():void { trace("func___setConnected1"); eventRemove(); this._controller.uiLogIn(); } private function eventRemove():void { trace("function___eventRemove"); this.netCon.removeEventListener('netStatus', netStatusHandler); this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk); } Огромное спасибо за подсказку, и вообще - я правильно передаю управление приложением обратно???? |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Ну я так.. для наглядности, в смысле лишнего, вы имеете введу, что тяжело разобраться по сути?
Если по сути, то последние функции, создание комбобоксов ни к чему... Нет ссылки не зануляю, вот.. уже подсказали, делаю. Может че и получится после зануления. |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
да, вот доделал, обнулил, запустил в конце GC результат таков же, - висит в памяти.
![]() Напомню, структура такова. из Controller в UI_Connection, из UI_Connection в UI_NewGame, Из класса Controller private function destructor():void { trace("func___destructorC"); _uiconnect.destroy(); while (numChildren) removeChildAt(0); } из класса UI_NewGame public function destroy():void { trace("function___destroy"); this.netCon.removeEventListener('netStatus', netStatusHandler); this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk); this.comboSpCount = null; this.comboSpStake = null; this.comboSpStartGeld = null; this.btn_Create = null; this.cont = null; } да, от слушателей тоже отписываюсь, специально не ставил никакие слушатели на эти комбобоксы, чтоб на них проверить. |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Вот, цикл в конструкторе делает
или он на самом деле не делает? ![]() |
|
|||||
|
А gc, может и вовсе не прийти, если флешка мало памяти съела.
__________________
Сам себе репортер |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
все удаляет, только что проверял.
Хммм, ну как так тогда, элементы из сцены удалились, потом я их занулил, функция вызывается 100%! тоисть зануление делается, никакие события на комбобоксы не повешены. Я сейчас на другие элементы интерф не смотрю, так как главное чтоб один заработал, а остальные я сделаю. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|