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

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

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

Регистрация: Mar 2010
Сообщений: 9
По умолчанию проблема с вложенными детьми в movieclip

Добрый день, уважаемое сообщество.

Столкнулся с такой проблемой: у меня есть MovieClip, в котором лежат другие мувики с анимацией. Для каждого из кадров главного мувика я делаю BitmapData, затем перехожу на следующий кадр, чтобы в скриншоте была анимация, я делаю переход всем внутренним мувикам на следующий кадр. Но в результате я не получаю анимации, а получаю первый статический кадр, хотя трейсы показывают, что создаются все кадры. Можно как-то решить эту проблему без использования таймера или же enter_frame?

Старый 18.03.2010, 13:41
Bond007 вне форума Посмотреть профиль Отправить личное сообщение для Bond007 Найти все сообщения от Bond007
  № 2  
Ответить с цитированием
Bond007

Регистрация: Mar 2010
Сообщений: 100
Для чего вообще BitmapData.
Вообще, что хотите сделать, какая цель ?

Старый 18.03.2010, 14:01
darkchaos вне форума Посмотреть профиль Отправить личное сообщение для darkchaos Найти все сообщения от darkchaos
  № 3  
Ответить с цитированием
darkchaos

Регистрация: Mar 2010
Сообщений: 9
Цитата:
Сообщение от Bond007 Посмотреть сообщение
Для чего вообще BitmapData.
Вообще, что хотите сделать, какая цель ?
Такой метод мне необходим для визуального прироста производительности (т.к. много сложного вектора на сцене получится), памяти конечно больше уходит, но это уже вопрос оптимизации

Старый 18.03.2010, 14:23
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 4  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
cacheAsBitmap - не подходит?
или вы не добавляя в дисплей лист перерисовываете?

Старый 18.03.2010, 14:34
darkchaos вне форума Посмотреть профиль Отправить личное сообщение для darkchaos Найти все сообщения от darkchaos
  № 5  
Ответить с цитированием
darkchaos

Регистрация: Mar 2010
Сообщений: 9
Цитата:
Сообщение от nOobCrafter Посмотреть сообщение
cacheAsBitmap - не подходит?
или вы не добавляя в дисплей лист перерисовываете?
Да, я не добавляю в дисплей лист, фактически мувик у меня создается 1 раз в начале, а потом хранится только коллекция из его кадров. Так что cacheAsBitmap не поможет, тем более что с этим есть кое-какие проблемы http://xitri.com/2009/03/27/cache_as...ternative.html

Старый 18.03.2010, 14:50
Bond007 вне форума Посмотреть профиль Отправить личное сообщение для Bond007 Найти все сообщения от Bond007
  № 6  
Ответить с цитированием
Bond007

Регистрация: Mar 2010
Сообщений: 100
Приведите код или важные куски кода, а то как-то сложно.

Старый 18.03.2010, 15:31
darkchaos вне форума Посмотреть профиль Отправить личное сообщение для darkchaos Найти все сообщения от darkchaos
  № 7  
Ответить с цитированием
darkchaos

Регистрация: Mar 2010
Сообщений: 9
Цитата:
Сообщение от Bond007 Посмотреть сообщение
Приведите код или важные куски кода, а то как-то сложно.
Код AS3:
private final function addElements(ClassDefinition:Class, strState:String = null):Vector.<BitmapData> {
	var vecStateArray:Vector.<BitmapData> = new Vector.<BitmapData>(),
	     i:int = 0,
	     j:int,
		iTotalChildren:int,
		matr:Matrix,
		mc:MovieClip = new ClassDefinition(),
		bmd:BitmapData,
		iTotalFrames:int = mc.totalFrames,
		rect:Rectangle = mc.getBounds(mc);
	if (strState) {
                  mc.gotoAndStop(strState);
           }
	for (i = mc.currentFrame; i <= iTotalFrames; i++) {
		mc.gotoAndStop(i);
		if (mc.currentLabel != strState) {
			break;
		}
		matr = new Matrix();
		matr.tx = -rect.x;
		matr.ty = -rect.y;
 
		bmd = new BitmapData(rect.width, rect.height, true, 0x00000000);
		bmd.draw(mc, matr);
		iTotalChildren = mc.numChildren;
		for(j = 0; j < iTotalChildren; j++) {
			jumpNextFrame(mc.getChildAt(j), i);
		}
		vecStateArray.push(bmd);
	}
	return vecStateArray;
}
 
private final function jumpNextFrame(doObject:DisplayObject, frame:int):void {
	var mc:MovieClip = doObject as MovieClip;
	if (mc) {
	          var children:int = mc.numChildren; 
	          for(var i:int = 0; i < children; i++) {
		        jumpNextFrame(mc.getChildAt(i), frame);
	          }
	          mc.gotoAndStop(frame% mc.totalFrames);
	}
}
В этом коде делается непосредственно копирование, т.е. скриншот, а отрисовка этих битмапов происходит в другом месте

Старый 18.03.2010, 17:07
Bond007 вне форума Посмотреть профиль Отправить личное сообщение для Bond007 Найти все сообщения от Bond007
  № 8  
Ответить с цитированием
Bond007

Регистрация: Mar 2010
Сообщений: 100
Как-то мудрено все очень.

Ну в целом вроде все норм. Не понятно почему в функции объявление типа ClassDefinition:Class , так известно, что на входе мувиаклип, ну да ладно.

а как рисуете ?

Старый 18.03.2010, 17:21
darkchaos вне форума Посмотреть профиль Отправить личное сообщение для darkchaos Найти все сообщения от darkchaos
  № 9  
Ответить с цитированием
darkchaos

Регистрация: Mar 2010
Сообщений: 9
Цитата:
Сообщение от Bond007 Посмотреть сообщение
Как-то мудрено все очень.

Ну в целом вроде все норм. Не понятно почему в функции объявление типа ClassDefinition:Class , так известно, что на входе мувиаклип, ну да ладно.

а как рисуете ?
На входе подается такой параметр, потому что класс берется из swc, заранее известно что он наследован от MovieClip, но какая графика в нем неизвестно. Отрисовка делается каждый тик таймера
Код AS3:
_bmd.copyPixels(bmd, bmd.rect, new Point(x, y), null, null, true);
где _bmd - битмапдата объекта, который лежит на сцене, а bmd получили из описанного выше метода. Повторюсь, что написанный мной код работает, если в мувике нет мувиков с анимацией, а если есть, то картинка не меняется, хотя видно что по тику таймера кадры меняются

Старый 18.03.2010, 17:43
Bond007 вне форума Посмотреть профиль Отправить личное сообщение для Bond007 Найти все сообщения от Bond007
  № 10  
Ответить с цитированием
Bond007

Регистрация: Mar 2010
Сообщений: 100
Я что то думал, что вообще не работает.

Видимо анимацию нужно разбить на кадры, а кадры уже переводить в битмапы.

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

Теги
bitmapdata , frame , movieclip

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

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


 


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


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