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

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сообщение от PlutDem Посмотреть сообщение
scroll() одной картинки занимает 4 мс, думаю остальные операции с bitmapData немногим быстрее и уж точно не быстрее простого перемещения картинки.
Да вот нет. copyPixels быстрее, чем поменять координату.

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Для прокрутки фона я использовал сдвиг матрицы bitmapData по координате X
__________________
adobe AS3 manual

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

Регистрация: Feb 2012
Сообщений: 212
Psycho Tiger
Код AS3:
img= Bitmap(loader.content)
 
var tim:Number = getTimer();
img.bitmapData.copyPixels(img.bitmapData, new Rectangle(0,0,50,50),new Point(50,50));
 
trace(getTimer()-tim);// 4 мс
Тоже 4 мс. Нет, я конечно не знаю, может я что то не так делаю?


Последний раз редактировалось PlutDem; 18.04.2012 в 12:36.
Старый 18.04.2012, 18:15
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 14  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Единичный тест ничего не стоит. Тесты нужно проводить пачками, и по клику, когда FP уже "разогрелся".
К тому же неплохо, правда? Там просто координату подвинули за 4 мс, а тут создали новый Rectangle, новый Point, ещё и перерисовали - и тоже 4.

Старый 18.04.2012, 18:36
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 15  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Там просто координату подвинули за 4 мс...
???
Цитата:
Сообщение от PlutDem Посмотреть сообщение
...не быстрее простого перемещения картинки.
Под перемещением картинки я имел ввиду изменение x и y координат DisplayObject. Сколько бы вы не "грели" FP scroll() и copyPixels() не станут работать в 400 раз быстрее.

Старый 18.04.2012, 18:43
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 16  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
зачем вообще таймер я не понимаю... не проще сделать override public function set x(value:Number):void { и дальше тот код с прямоугольником и копиПикселс и просто тупо двигать?

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сколько бы вы не "грели" FP scroll() и copyPixels() не станут работать в 400 раз быстрее.
Когда происходит сдвиг координат - процессор нагружается. Он не может не нагружаться ) И если где-то в системе поднято 3 сервера, открыто 20 IDE и Вы занимаетесь перекодированием видео, то вполне вероятно, что флешка может тормозить. А так да, конечно, ни старт FP, ни что-то другое не влияет на скорость исполнения скрипта.


В общем, если Вы ищите правду - возьмите какой-нибудь спрайт, отрисуйте его в BitmapData, и сделайте 1000 раз copyPixels, замерьте время. Потом расплодите этот спрайт на 1000 других и поменяйте разок каждому координату (да, именно так. Я верю, что внутри Flash API есть инвалидаторы). Удивитесь результату. А потом запускайте тест секунд через 5 после старта FP, например, по клику. И снова удивитесь результату.

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

Регистрация: Feb 2012
Сообщений: 212
Psycho Tiger
Код AS3:
for (var i:int = 0; i < 10000; i++) {
	vImg[i].x += 1;
	vImg[i].y += 1;
}
//~7 ms
Код AS3:
for (var i:int = 0; i < 10000; i++) {
	 img.bitmapData.copyPixels(img.bitmapData, rect,point);
}
//~ 270 ms

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Ну, что-то неправильно. Вы делали BitmapData#lock? Давайте полный код теста.

Старый 18.04.2012, 19:39
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 20  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Код AS3:
public class Main extends Sprite {
 
		public var loader:Loader = new Loader();
		public var img:Bitmap;
		public var vImg:Vector.<Sprite> = new Vector.<Sprite>;
 
 
		public function Main():void {
 
			loader.load(new URLRequest("../lib/dirt.jpg"));
			stage.addEventListener(MouseEvent.MOUSE_DOWN, initImg);
 
			for (var i:int = 0; i < 10000; i++) {
				vImg.push(new Sprite);
			}
 
		}
		public function initImg(e:MouseEvent):void {
 
			var rect:Rectangle = new Rectangle(0, 0, 50, 50);
			var point:Point = new Point(50, 50);
 
			img= Bitmap(loader.content)
 
			var tim:Number = getTimer();
 
			for (var i:int = 0; i < 10000; i++) {
				//img.bitmapData.copyPixels(img.bitmapData, rect,point);
				vImg[i].x += 1;
				vImg[i].y += 1;
			}
			trace(getTimer()-tim);
		}
 
	}

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

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

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


 


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


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