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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.11.2006, 23:25
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 31  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
Думал заюзать BitmapData.noise, чтобы создать рандомные точки для копирования, а он оказывается довольно тормознутый (функция ниже работает в 2раза медленней, чем предложеный вариант выше), но эффект получился довольно красивый! Точки не сразу ставятся на свои места, а плавно проявляются.

Код:
var cnt:int = 0;
function onDraw2(e:Event):void {
	var alphaBitmap:BitmapData = new BitmapData(bitmapWidth, bitmapHeight, true);
	alphaBitmap.noise(cnt++, 0,50, BitmapDataChannel.ALPHA);
	
	resultBitmapData.copyPixels(myBitmapData, new Rectangle(0,0, bitmapWidth, bitmapHeight),
		new Point(0,0), alphaBitmap,new Point(0,0), false);
}
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 29.11.2006, 01:48
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 32  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Хотел как лучше, получилась всякая чушь:
Код:
var bitmapWidth:Number = 550;
var bitmapHeight:Number = 400;
var startBitmap:BitmapData = new BitmapData(bitmapWidth,bitmapHeight,false,0xFFFF00);
var endBitmap:BitmapData = new BitmapData(bitmapWidth,bitmapHeight,false,0xFF0000);
this.addChild(new Bitmap(endBitmap));

var bitmapArray:Array = new Array();
var lineArray:Array = new Array();
var rowArray:Array = new Array();
var tempArray:Array = new Array();
for (var i:Number = 0;i<bitmapWidth;i++) {
	lineArray.push(i);
}
for (var j:Number = 0;j<bitmapHeight;j++) {
	tempArray = (new Array()).concat(lineArray);
	bitmapArray.push(tempArray);
	rowArray.push(j);
}
lineArray = null;
var rand:Number;
var pixelCounter:Number = 0;
var pixelX:Number;
var pixelY:Number;
var randX:Number;
var randY:Number;
var line:Array;
var defaultRand:Number = 2000;
var t:Number = getTimer();
var enterFrameHandler:Function = function(event:Event):void {
	rand = defaultRand;
	while(--rand&&rowArray.length) {
		randY = Math.floor(Math.random()*rowArray.length);
		pixelY = rowArray[randY];
		
		line = bitmapArray[pixelY];
		
		randX = Math.floor(Math.random()*line.length);
		pixelX = line.splice(randX,1);
		line.shift();
		line.pop();
		
		endBitmap.setPixel(pixelX,pixelY,startBitmap.getPixel(pixelX,pixelY));
		if (!line.length) {
			rowArray.splice(randY,1);
		}
	}
	
	if (rand==defaultRand-1) {
		removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
		trace(getTimer()-t);
	}
}
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
На мусор, чушь и лишнее в коде не смотреть

Старый 29.11.2006, 12:57
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 33  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Цитата:
Сообщение от __etc
Код:
pixelX = line.splice(randX,1);
line.shift();
line.pop();


это ОЧЕНЬ плохо в цикле!.

splice, shift очень ресурсоемкие операции, pop вроде не очень... но тоже занимает больше времени чем простое обращение по индексу []. Кнут сказал "90% времени выполнения программа находится в циклах, поэтому следует оптимизировать именно их"

Ну, а по практике нужно думать %) Врядли я рожу тут оптимальную идею по тому как это сделать быстро(

В принципе первый способ который предложен MerlinTwi Претендует на оптимальность если в него добавить мои советы %). Единственное, что я незнаю/непридумал как это создание массива с рендомными точками/получение не повторяющихся точек. %(
__________________
33 коровы

Старый 29.11.2006, 13:07
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 34  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Дык, я же не собирался демонстировать вариант оптимизации, я просто показал, какой эффект получается (а его, как раз, и дают shift, pop и splice).
Если убрать shift и pop, то мой вариант при 2000 итераций отстает от варианта MerlinTwi где-то на 50 мс. С другой стороны, длинные массивы, например, Flash 8 очень не любит — гораздо быстрее работает с множеством коротких, чем с одним длинным.


Последний раз редактировалось etc; 29.11.2006 в 13:11.
Старый 29.11.2006, 13:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 35  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
WindWalker, а прочитать первой пост темы по ссылке совесть не позволила?

Старый 29.11.2006, 13:45
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 36  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
В том, что прочитана была только первая строчка. Про threshold там упоминалось несколько раз, но он не подходит из-за своей медлительности, внимательнее нужно быть.

Старый 29.11.2006, 13:59
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 37  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Цитата:
Сообщение от __etc
С другой стороны, длинные массивы, например, Flash 8 очень не любит — гораздо быстрее работает с множеством коротких, чем с одним длинным.
Смотря как с ними работать %)

На я как-то подымал тему работы с массивами и с ассоциативными массивами. Там были тесты для разных плееров.

Ну и продолжая разговор, делал я проект там была работа я ОГРОМНЫМИ массивами. Допустим подгружались статистические данные посекундно/минутно/часово для нескольких месяцев/лет... (ну естественно не все сразу , а по запросу некоторое их количество). Но все хранилось в массиве, посчитай его виртуальную длинну реально канешно он был чуть поменьше (флеш как показывает практика хранит их по типу ассоциативных...), но все равно огромные массивы. А работало шустро %).

ЗЫ проект был на мх2004.
__________________
33 коровы

Старый 29.11.2006, 14:05
vapes вне форума Посмотреть профиль Отправить личное сообщение для vapes Найти все сообщения от vapes
  № 38  
Ответить с цитированием
vapes
 
Аватар для vapes

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
Ого теперь у меня вывих мозга

Старый 29.11.2006, 14:09
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 39  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
__etc, в твоем примере замещается не вся картинка?
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 29.11.2006, 14:18
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 40  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
MerlinTwi, вся, если убрать shift и pop. Просто с ними прикольный градиент получается

__i, вместе с Дембицким делали что-то подобное, что в этой теме, так вот один длинный массив тормозил много больше, чем двумерный.

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

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

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


 


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


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