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

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

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
По умолчанию Ручной подсчет ссылок

Всем hola!
Что имеем:
- хранилище ресурсов
- запакованные ресурсы (свой компактный формат)
- распакованные ресурсы (тупо наборы битмап)
- ресурсы для тех, кто их использует, доступны по URL (условно bundle.getAsset("http://..."))

Что хотелось бы:
- в запакованном виде все ресурсы всегда доступны
- распакованные ресурсы доступны только если они используются

То есть фактически хотелось бы знать, сколько объектов используют ресурс, и, если таких объектов ровно 0 (zero), то удалить распакованный ресурс из памяти и ждать обращения по URL для распаковки и выдачи.

Уже в общем-то есть идеи как это реализовать, но хотелось бы услышать Ваше мнение.

Идеи - welcome!
__________________
...вселенская грусть

Старый 10.03.2012, 22:59
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Я так и не смог придумать. Ересь это.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.03.2012, 23:25
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 3  
Ответить с цитированием
-De-
 
Аватар для -De-

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

Старый 11.03.2012, 00:00
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 4  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Ну в общем одной из идей и было передавать "умный указатель", который бы при разрушении (кастомный деструктор, вызываемый внутри деструктора объекта, ссылающегося на ресурс) сигнализировал бы о нуле ссылок в случае чего.
Хочется как-то через словарь со слабыми ссылками. Ну и лексус еще хочется.
__________________
...вселенская грусть

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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Особо извращенный вариант (просьба ногами не запинывать):
Код AS3:
public class ResourceProvider
{
	public function ResourceProvider()
	{
		// Init resource list
		this._resHashtable = new Object();
		this._resHashtable["resource001"] = new Bitmap();
		this._resHashtable["resource002"] = new Bitmap();
		this._resHashtable["resource003"] = new Bitmap();
		this._resHashtable["resource004"] = new Bitmap();
 
		this._resPtrRefs = new Dictionary(true);
 
		// Validate ptrs
		setInterval(this._validatePtrs, 1000);
	}
 
	private var _resHashtable : Object;
	private var _resPtrRefs : Dictionary;
 
	public function getResourcePointer( id:String ) : ResourcePointer 
	{
		if (!(id in this._resHashtable))
			return null;
 
		var ptr:ResourcePointer = new ResourcePointer(id, this);
		this._resPtrRefs[ptr] = true;
		return ptr;
	}
 
	internal function getResourceById( id:String ) : Object
	{
		return this._resHashtable[id] as Object;
	}
 
	private function _validatePtrs( ...args ) : void
	{
		var count:int = 0;
		for (var p:Object in this._resPtrRefs)
			count++;
 
		if (count == 0)
			this._destroy();
	}
 
	private function _destroy() : void
	{
		// TODO destroy here
	}
}
 
public class ResourcePointer
{
	public function ResourcePointer( id:String, provider:ResourceProvider )
	{
		this._id = id;
		this._provider = provider;
	}
 
	private var _id : String;
	private var _provider : ResourceProvider;
 
	public function getResource() : Object
	{
		return this._provider.getResourceById(this._id);
	}
}


Последний раз редактировалось i.o.; 11.03.2012 в 02:24.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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