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

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

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

Регистрация: Aug 2010
Сообщений: 144
По умолчанию чистка мусора

Пытаюсь очистить элементы со сцены чтобы они не накоплялись (чистка мусора). Но не как не могу понять как это сделать в обычном примере там где нет цикла все получаеться вот код

Код AS3:
import flash.display.MovieClip;
var koord_1:Number;
var koord_2:Number;
var boo:Boolean = false
var obj: MovieClip;
var _exp: MovieClip = new exp();
addChild(_exp);
for(var i:int=0; i<5;i++)
{
	var mc: MovieClip = new mk();
	mc.y=40*i+50
	addChild(mc);
	mc.addEventListener(MouseEvent.CLICK, mcClick)
}
 
 
function mcClick(e:MouseEvent): void
{
		obj = MovieClip(e.target);
		if(boo==false)
		{
			removeChild(_exp);
			boo = true;
			//trace(obj.y);
			koord_1=obj.y;
			//trace (koord_1);
			//trace("вы нажали на кнопку")
			addChild(_exp);
			trace('na scene')
		}
 
		if(koord_1==obj.y)
			{
				//boo = false;
				trace('нечего не делаем');
				_exp.x=200;
				_exp.y=200;
				//trace (koord_1);
				//trace (obj.y);
			}
		else 
		{
			//trace(obj.y);
			trace("вы нажали на кнопку");
			boo = false;
			removeChild(_exp);
			addChild(_exp);
	}
}
Не судите строго возможно он не коректный но рабочий

А вот более чложный пример где такая чистка не проходит:

Код AS3:
import flash.net.URLLoader;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.display.MovieClip;
import flash.display.IBitmapDrawable;
import flash.text.TextField;
import fl.motion.easing.Exponential;
 
//Начинаем работу с ползунком, делаем scrol
var boo:Boolean;
var koord_1:Number;
var btnb: MovieClip = new btn_();
var listingChild: MovieClip = new listingChild_();
var scrollBar:MovieClip = new scroll_Bar();
var scroller: MovieClip = new scroller_();
var listing: MovieClip = new listing_();
var _exp: MovieClip = new exp();
const URL:String = "xml.xml";
 
var loader:URLLoader;
 
init();
 
function init():void
{
	loader = new URLLoader();
	loader.addEventListener(Event.COMPLETE, comleteLoading);
	var request:URLRequest = new URLRequest(URL);
	loader.load(request);
}
 
function comleteLoading(e:Event):void
{
	//var text:String = loader.data;
	var xml:XML = XML(e.target.data);
	var xmlList = xml.children();
	var obj:MovieClip;
	for(var i:int=0; i<xmlList.length(); i++)
	{
		var xmlListchild = xml.menu[i].children();
		//trace(xmlListchild[2])
		var temp:MovieClip = new btn();
		temp.x = 30;
        temp.y = 24*i;
		temp.buttonMode = true;
		temp.useHandCursor = true;
		addChild(temp);
		var txt:TextField = new TextField();  
        var newFormat:TextFormat = new TextFormat();
        txt.x = 0;
        txt.y = 3;
	    txt.selectable = false;
        txt.width = 200;
        txt.height = 20;
		newFormat.font = "Arial";
		newFormat.bold=true;
		newFormat.size = 12;
		newFormat.color=0x000000;
        txt.text = xml.menu[i].@id;
		//trace(xml.menu[i].@id);
        temp.addChild(txt);
		txt.setTextFormat(newFormat);
		txt.mouseEnabled = false;
		temp.addEventListener(MouseEvent.CLICK, btnClick)
		temp.length = xmlListchild.length();
		temp.children=xml.menu[i].children();
	}
 
	function btnClick (e:MouseEvent):void
	{
		function removeAllChildren() : void {
 		while (listing.numChildren)
   		listing.removeChildAt(0);
 		}
		removeAllChildren();
				trace('delete');
		obj = MovieClip(e.target);
			for(var i:int=0; i<e.target.length;i++)
			{
				addChild(listing);
				var btn_child:MovieClip = new btnchild();
				btn_child.x = temp.width+temp.x;
				btn_child.y = i*23.5;
				var txtChild:TextField = new TextField();  
    			var newFormat:TextFormat = new TextFormat();
				txtChild.x = 0;
    			txtChild.y = 5;
				txtChild.selectable = false;
    			txtChild.width = 200;
   			 	txtChild.height = 20;
				newFormat.size = 13;
				newFormat.color=0xffffff;
				txtChild.text = e.target.children[i].attributes()[0];
				listing.addChild(btn_child);
				btn_child.addChild(txtChild);
				txtChild.setTextFormat(newFormat);
				txtChild.mouseEnabled = false;
			}
		if(listing.height>=stage.stageHeight)
		{
			boo==true;
			trace(listing.height);
			scroller.height = (scrollBar.height/(listing.height))*scrollBar.height;
			addChild(scrollBar);
			scrollBar.addChild(scroller);
			/*scroller.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, place);
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, scrollandBar);*/
		}
а вот часть где я это хочу провернуть
Вложения
Тип файла: rar исходник.rar (17.1 Кб, 11 просмотров)


Последний раз редактировалось sneltyn; 12.12.2011 в 20:05.
Старый 12.12.2011, 05:00
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Что знаем, то пишем, чего не знаем, того не пишем. Сперва узнаем, потом пишем. Никак иначе не писать. Разбивать задачу на мелнькие простые подзадачи. Чтоб если что-то не работает, то чётко найти подзадачу, в которой не сработало как надо.
У вас НЕТ удаления! removeChild и потом addChild - не удалит же блин. В чложном примере вообще нет.
Не знаете, что такое сборка мусора - тоже не пишите про это. Пишите как в конце, нормальными понятными словами (не понял, что конкретно "предыдущее" и "новое", оно наверное должно быть из кода понятно, но вот не понял %).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 12.12.2011, 09:56
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
В код не вникал, но в глаза бросилось
Код AS3:
obj = MovieClip(e.target);
for(var i:int=0; i<e.target.length;i++)
Разве у мувика есть такое свойство как length?

Старый 12.12.2011, 16:05
sneltyn вне форума Посмотреть профиль Отправить личное сообщение для sneltyn Найти все сообщения от sneltyn
  № 4  
Ответить с цитированием
sneltyn

Регистрация: Aug 2010
Сообщений: 144
Ну если я напишу так:
Код AS3:
for(var i:int=0; i<e.target.length;i++)
			{
removeChild(listing);
				var btn_child:MovieClip = new btnchild();
				btn_child.x = temp.width+temp.x;
				btn_child.y = i*23.5;
				var txtChild:TextField = new TextField();  
    			var newFormat:TextFormat = new TextFormat();
				txtChild.x = 0;
    			txtChild.y = 5;
				txtChild.selectable = false;
    			txtChild.width = 200;
   			 	txtChild.height = 20;
				newFormat.size = 13;
				newFormat.color=0xffffff;
				txtChild.text = e.target.children[i].attributes()[0];
				listing.addChild(btn_child);
				btn_child.addChild(txtChild);
				txtChild.setTextFormat(newFormat);
				txtChild.mouseEnabled = false;
aadChild(listing);
			}
то оно не срабатывает(

Старый 12.12.2011, 16:35
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 5  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
aadChild доставляет

Старый 12.12.2011, 19:12
sneltyn вне форума Посмотреть профиль Отправить личное сообщение для sneltyn Найти все сообщения от sneltyn
  № 6  
Ответить с цитированием
sneltyn

Регистрация: Aug 2010
Сообщений: 144
Ну вот проблему решил сам)))

Может кому понадобиться подобная очистка тогда юзайте очистку дочерних элементов:

Код AS3:
function removeAllChildren() : void {
 		while (listing.numChildren)
   		listing.removeChildAt(0);
 		}
		removeAllChildren();

Старый 12.12.2011, 19:29
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Ну вот проблему решил сам)))
А не на форуме подглядели

Старый 12.12.2011, 20:00
sneltyn вне форума Посмотреть профиль Отправить личное сообщение для sneltyn Найти все сообщения от sneltyn
  № 8  
Ответить с цитированием
sneltyn

Регистрация: Aug 2010
Сообщений: 144
Было дело)
А может мне кто то сказать насколь не коректный код, и ткнуть меня на это что бы я больше так не делал. спс)

Старый 12.12.2011, 20:46
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
А может мне кто то сказать насколь не коректный код, и ткнуть меня на это что бы я больше так не делал. спс)
Ваш код пахнет, если честно. Даже воняет, если совсем откровенно. Настолько его функциональность неочевидна, что вы сами в ней путаетесь, не говоря об остальных.

- Для начала почитайте правила оформления кода, конвенцию.
- Научитесь выделять блоки кода в небольшие функции/методы, а не пихать все в одну-две функции.
- И в идеале - не писать в кадрах и познакомиться с ООП.

PS: по теме - удачно впихнули removeAllChildren(), в принципе по-другому тут не решить задачу.


Последний раз редактировалось i.o.; 12.12.2011 в 23:00.
Старый 12.12.2011, 22:57
sneltyn вне форума Посмотреть профиль Отправить личное сообщение для sneltyn Найти все сообщения от sneltyn
  № 10  
Ответить с цитированием
sneltyn

Регистрация: Aug 2010
Сообщений: 144
Спасибо прийми при следуещем написании кода! Я делал на скорую руку поэтому так и получилось, а вообще учу C++ as 3.0 просто нравиться и хочу научиться нормально на нем писать приложения, к ООП только подхожу!

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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