|
|
|||||
Движение больших слоев фона
Все нет сил было бы все супер, если бы не унылая оптимизация Перерыл интернет превратив браузер и рабочий стол в мусорку.
Ситуация такая: Входные данные: контейнеры размером примерно 3000х1000 с векторной графикой. Инициализация: создаю новые контейнеры с предыдущих но уже с растерезированным вектором и добавляю их на сцену. Старые контейнеры с их начинкой сравниваем с null. Итерация: контейнеры стоят на своих местах, с помощью clear(), Matrix() и beginBitmapFill() перерисовываю сохраненную битмапку в свой контейнер. При таком раскладе фпс падает до 16, если контейнеры убрать - получаю необходимые 28-31. Если при итерации ничего не перерисовывать и даже не двигать сцену - те же 16 (и область перерисовки - весь экран). Пробовал ограничить drawRect() размерами флешки, получил в ответ 14 фпс ((( Помогите, буду признателен. Последний раз редактировалось FieryWall; 03.01.2012 в 22:39. |
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Цитата:
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
если нужен только скроллинг без изменения фона, рекомендую копать в сторону scrollRect, мега быстрая фича.
|
|
|||||
//fonMtx - матрица, определяю для сдвига картинки fonMtx.tx = fon.x - par.x / speed; fonMtx.ty = fon.y - par.y / speed; //чищу предыдущую graphics.clear(); //рисую новую graphics.beginBitmapFill(fonDat, fonMtx, false, true); //прямоугольник, обязательно graphics.drawRect(fon.x - par.x / speed, fon.y - par.y / speed, temp.x, temp.y); graphics.endFill(); //собственно вся итерация |
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Я поддержу, попробуйте scrollRect
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
Не уверен, но мне кажется, что bitmapData.draw будет быстрее, чем beginBitmapFill.
Причем если есть возможность отрисовывать содержимое контейнеров в одну битмапдату, то скорость должна сильно повыситься, т.к. плееру не прийдется обрабатывать наложение сложных дисплейобджектов.
__________________
aka doctorstal |
|
|||||
по поводу
Цитата:
__________________
местонахождение |
|
|||||
Всем большущее спасибо!!! Пошел пробовать
|
|
|||||
Цитата:
Либо попытаться отрисовать дисплейобджекты в какую-нибудь битмапу: package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.utils.getTimer; /** * ... * @author DoctorSTaL */ public class Main extends Sprite { private var arr:Array; private var phase:int; private var _testMethods:Array; private var container:Sprite; public function Main():void { super.addEventListener(Event.ADDED_TO_STAGE, this.addedToStage); } private function addedToStage(event:Event = null):void { super.removeEventListener(Event.ADDED_TO_STAGE, this.addedToStage); // entry point _testMethods = new Array(); _testMethods.push(testDraw); _testMethods.push(testBitmapFill); arr = new Array(); container = new Sprite(); for (var i:int = 0; i < 3000; i++) { var s:Shape = new Shape(); s.graphics.beginFill(0xffffff * Math.random(), 1); s.graphics.drawEllipse(0, 0, 200, 100); s.graphics.endFill(); var bdata:BitmapData = new BitmapData(200, 100, true, 0); bdata.draw(s); arr.push([s, bdata]); s.graphics.clear(); container.addChild(s); } stage.addEventListener(MouseEvent.CLICK, this_clickHandler); } private function testDraw():void { var bdata:BitmapData = new BitmapData(200, 100); for (var i:int = 0; i < arr.length; i++) { bdata.draw(arr[i][1]); } } private function testBitmapFill():void { var s:Shape; for (var i:int = 0; i < arr.length; i++) { s = arr[i][0]; s.graphics.clear(); s.graphics.beginBitmapFill(arr[i][1]); s.graphics.drawRect(0,0,200, 100); s.graphics.endFill(); } new BitmapData(200, 100, true, 0).draw(container); } private function this_clickHandler(event:MouseEvent):void { var time:uint = getTimer(); _testMethods[phase](); trace("phase "+phase+":"+(getTimer() - time)); phase = (phase + 1) % _testMethods.length; } } } Цитата:
__________________
aka doctorstal |
|
|||||
если фон не масштабируется, не поворачивается, и сдвигается на целые пиксели, то bitmapData.copyPixels даст наилучшую производительность
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 04.01.2012 в 12:52. |
Часовой пояс GMT +4, время: 10:37. |
|
« Предыдущая тема | Следующая тема » |
Теги |
большая перерисовка , большие изображения , большой фон , движение фона , много фонов |
|
|