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

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

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

Регистрация: Nov 2010
Сообщений: 434
По умолчанию BitmapData, как очистить память

Сделал функцию для проверки столкновений мувиклипов

Код AS3:
public static function CheckCollision(Object1: MovieClip,
				      Object2: MovieClip): Boolean
{
//--------------------------------------------------------------------
	var bmpd1: BitmapData;
	var bmpd2: BitmapData;
	var bool: Boolean;
//--------------------------------------------------------------------	
	bmpd1 = new BitmapData(550, 400, true, 0);
	bmpd2 = new BitmapData(550, 400, true, 0);
	bmpd1.fillRect(bmpd1.rect, 0);
        bmpd2.fillRect(bmpd2.rect, 0);
	bmpd1.draw(Object1, new Matrix(1, 0, 0, 1, Object1.x, Object1.y));
	bmpd2.draw(Object2, new Matrix(1, 0, 0, 1, Object2.x, Object2.y));
	if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
	{
		bool = true;
	}
	else
	{
		bool = false;
	}
	bmpd1.dispose();
	bmpd2.dispose();
	bmpd1 = null;
	bmpd2 = null;
//--------------------------------------------------------------------	
	return bool;
//--------------------------------------------------------------------	
}
Проблема теперь в том чтобы очистить память отведённую под bmpd1 и bmpd2.
особенно если проверку столкновений делать в EnterFrame память всё растёт и растёт, как это поправить у кого есть идеи ?

Старый 20.03.2011, 21:22
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
dispose и отчищает память. Если, есть утечка, то ищите в другом месте. Воспользуйтесь профайлером.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 20.03.2011, 21:27
ЗлОй ПрОграММер вне форума Посмотреть профиль Отправить личное сообщение для ЗлОй ПрОграММер Найти все сообщения от ЗлОй ПрОграММер
  № 3  
Ответить с цитированием
ЗлОй ПрОграММер

Регистрация: Nov 2010
Сообщений: 434
dispose помогает я нечего не говорю, но сёравно если часто вызывать эту функцию то память растёт

Старый 20.03.2011, 22:11
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
dispose помогает я нечего не говорю, но сёравно если часто вызывать эту функцию то память растёт
Она растет пока сборщик мусора ее не очистит.

з.ы. А разве hitTest() есть в AS3? O_o

Старый 20.03.2011, 22:12
ЗлОй ПрОграММер вне форума Посмотреть профиль Отправить личное сообщение для ЗлОй ПрОграММер Найти все сообщения от ЗлОй ПрОграММер
  № 5  
Ответить с цитированием
ЗлОй ПрОграММер

Регистрация: Nov 2010
Сообщений: 434
для BitmapData есть) а можно принудительно вызвать сборщик мусора ? и следует ли это делать ?

Старый 20.03.2011, 22:24
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Следует, in debug purposes.

Старый 20.03.2011, 22:32
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
для BitmapData есть)
А, блин, точно. Давно уже не пользовался, забыл

Цитата:
а можно принудительно вызвать сборщик мусора ?
http://silin.su/#AS3/utils/gc

Старый 20.03.2011, 23:16
ЗлОй ПрОграММер вне форума Посмотреть профиль Отправить личное сообщение для ЗлОй ПрОграММер Найти все сообщения от ЗлОй ПрОграММер
  № 8  
Ответить с цитированием
ЗлОй ПрОграММер

Регистрация: Nov 2010
Сообщений: 434
скачал исходник, запустил его проверять, память как нагружалась так и продолжает нагружаться

Старый 20.03.2011, 23:18
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Я Вам гарантирую, что Вы не удаляете все ссылки на объект.

Старый 20.03.2011, 23:37
ЗлОй ПрОграММер вне форума Посмотреть профиль Отправить личное сообщение для ЗлОй ПрОграММер Найти все сообщения от ЗлОй ПрОграММер
  № 10  
Ответить с цитированием
ЗлОй ПрОграММер

Регистрация: Nov 2010
Сообщений: 434
посмотрите я скину весь код
вот класс MathGeom в котором есть функция для проверки столкновений
Код AS3:
package  {
 
	import flash.display.MovieClip;
	import flash.display.BitmapData;
	import flash.geom.Matrix;
	import flash.geom.Point;
 
	public class MathGeom {
 
 
		public static function CheckCollision(Object1: MovieClip,
						     Object2: MovieClip): Boolean
		{
		//--------------------------------------------------------------------
			var bmpd1: BitmapData;
			var bmpd2: BitmapData;
			var bool: Boolean;
		//--------------------------------------------------------------------	
			bmpd1 = new BitmapData(1550, 1400, true, 0);
			bmpd2 = new BitmapData(500, 400, true, 0);
			bmpd1.fillRect(bmpd1.rect, 0);
                        bmpd2.fillRect(bmpd2.rect, 0);
			bmpd1.draw(Object1, new Matrix(1, 0, 0, 1, Object1.x, Object1.y));
			bmpd2.draw(Object2, new Matrix(1, 0, 0, 1, Object2.x, Object2.y));
			if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
			{
				bool = true;
			}
			else
			{
				bool = false;
			}
			bmpd1.dispose();
			bmpd2.dispose();
			bmpd1 = null;
			bmpd2 = null;
		//--------------------------------------------------------------------	
			return bool;
		//--------------------------------------------------------------------	
		}
 
	}
}
а вот главный класс
Код AS3:
package  {
 
	import flash.display.MovieClip;
	import flash.geom.Point;
	import flash.geom.Matrix;
	import flash.display.BitmapData;
	import flash.events.Event;
	import MathGeom;
 
 
	public class Main extends MovieClip {
 
		public var a: aaa = new aaa; //MovieClip
		public var b: bbb = new bbb; //MovieClip
 
		public function Main() {
			a.x = 100;
			a.y = 100;
			addChild(a);
			b.x = 170;
			b.y = 100;
			addChild(b);			
 
			this.addEventListener(Event.ENTER_FRAME, EnterFrame);
		}
 
		private function EnterFrame(e: Event): void {
			trace(MathGeom.CheckCollision(a, b));		
		}
 
	}
 
}

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

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

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


 


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


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