Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отказ от MovieClip'ов, Sprite'ов и Bitmap'ов (http://www.flasher.ru/forum/showthread.php?t=175755)

s3dworld 23.02.2012 14:25

Отказ от MovieClip'ов, Sprite'ов и Bitmap'ов
 
Всем доброго дня!

Этой ночью мне в голову стукнула безумная идея. Расскажу её Вам, а Вы оцените на сколько она выгодна. В теме я написал отказ от Bitmap'ов, но это не совсем так. Bitmap'ов будет два:

Код AS3:

public var primaryBuffer:Bitmap=null;
public var backBuffer:Bitmap=null;

Как Вы видите, я решил использовать два Bitmap'а как буфера для переключения. То один на экране будет, то другой. Основными же действующими компонентами будут классы BitmapData. Идея такая, тот буфер что в текущий момент не на экране мы каждый кадр очищаем и выводим попиксельно (регионами или ещё какими-то способами). Собственно на счёт очистки можно оптимизировать и перерисовывать только изменившиеся части (но это уже для тех случаях, если хочется позаморачиваться). В общем когда кадр нарисован в буфер, мы меняем буфера местами. Вот и всё! То есть работаем только с пиксельными данными. Можно будет насоздавать своих классов анимации, из набора BitmapData'ов и их переключение.

На сколько это хорошая идея для повышения производительности? Кто так делает вообще?

alatar 23.02.2012 14:27

Поздравляю вы "придумали" блитинг.
Цитата:

Как Вы видите, я решил использовать два Bitmap'а как буфера для переключения.
Обычно достаточно одного.

s3dworld 23.02.2012 14:29

alatar
Цитата:

Поздравляю вы "придумали" блитинг.
Давно всё придумано. Просто мне в голову пришло а не будет ли это выгодно. Кто-то это использует? Стоит ли на такой способ переходить?
Цитата:

Обычно достаточно одного.
А мерцания разве не будет?

nOobCrafter 23.02.2012 14:30

а как вы будите обрабатывать пользовательские события, например наведение на кнопку ил другие элементы интерфейса?

alatar 23.02.2012 14:35

Цитата:

Кто-то это использует?
Все растровые игровые движки. Например, http://flixel.org/
Цитата:

Стоит ли на такой способ переходить?
Зависит от задачи. Этот способ снижает нагрузку на процессор, но увеличивает потребление памяти.
Цитата:

А мерцания разве не будет?
Не будет.

s3dworld 23.02.2012 14:36

nOobCrafter
Цитата:

а как вы будите обрабатывать пользовательские события, например наведение на кнопку ил другие элементы интерфейса?
Так же как это делают на C++ с Direct3D. Ручное отслеживание по координатам. Передаём объектам координаты мышки.

-De- 23.02.2012 14:45

Есть подозрения, что рисовать в графикс рута - быстрее)
Про глюк типа отсутствия двойной буферизации писали, надо бы найти и плюсануть - там надо wmode ставить на самом деле.
И это, с таким подходом надо вообще-то уходить на AGAL =)

nOobCrafter 23.02.2012 14:57

Цитата:

Передаём объектам координаты мышки.
стоит ли овчинка выделки? это означает чуть ли не все переписать с 0. Насколько усложнятся базовые элементы и работа с ними?

s3dworld 23.02.2012 15:03

nOobCrafter
Цитата:

стоит ли овчинка выделки? это означает чуть ли не все переписать с 0. Насколько усложнятся базовые элементы и работа с ними?
Если это будет быстрее работать, то стоит. Я про этот способ подумал из-за скорости вывода. Да и и так у меня все объекты, это Bimtap'ы. Просто написать несколько классов по их последовательному переключению для анимации. Хранить вектор объектов, которые в данный момент выведены. У каждого такого объекта ссылка на уникальный BitmapData. Подписаться на вождение мышкой по State и передавать в каждый элемент вектора координаты мышки. Пускай каждый объект сам решает навели на него или нет. Правда надо будет реализовать Z-Order, чтобы передние объекты не позволяли задним функционировать в наведении перекрытых областей. Но если это даст существенный прирост в скорости, то почему бы и нет?

alatar 23.02.2012 19:42

Цитата:

Про глюк типа отсутствия двойной буферизации писали, надо бы найти и плюсануть - там надо wmode ставить на самом деле.
Если используется BitmapData#lock() (а в данном случае он должен использоваться обязательно), то рассинхронизации не будет.


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

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