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

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

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

Регистрация: Feb 2012
Сообщений: 18
Attention Копирование объекта класса Sprite

Собственно сабж. Есть объект класса Sprite. Нужно сделать его копию. Перепробовал кучу разных вариантов - ни чего не помогло.

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

Регистрация: May 2010
Сообщений: 543
Посмотрите поиском по форуму. Этот вопрос обсуждали много раз.

Вот пример темы. Вот конкретный рецепт. Еще можно скопировать как массив байт
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)


Последний раз редактировалось carrotoff; 23.03.2012 в 17:38.
Старый 23.03.2012, 17:37
kimagg вне форума Посмотреть профиль Отправить личное сообщение для kimagg Найти все сообщения от kimagg
  № 3  
Ответить с цитированием
kimagg

Регистрация: Feb 2012
Сообщений: 18
Не могли бы дать линк? А то я страниц 15 на выдаче поиска пролистал - нашел пару вариантов (не конкретно для Sprit'ов), но они не сработали у меня.

Старый 23.03.2012, 17:38
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 4  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Вот тут пример (для DO РАБОТАТЬ НЕ БУДЕТ!). Поэтому лучше написать свой метод clone вручную. Если Ваш спрайт статичен, то можно его в BitmapData отрисовать. А вообще не помешало бы чуть больше конкретики.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 23.03.2012 в 18:26.
Старый 23.03.2012, 18:02
kimagg вне форума Посмотреть профиль Отправить личное сообщение для kimagg Найти все сообщения от kimagg
  № 5  
Ответить с цитированием
kimagg

Регистрация: Feb 2012
Сообщений: 18
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Вот тут пример (если будет вообще для DO работать).
Сделал как там написано:
Код AS3:
function clone(source:Object):* 
{
    var copier:ByteArray = new ByteArray();
    copier.writeObject(source);
    copier.position = 0;
    return(copier.readObject());
}
 
//spriteA - существует, не нулевой и нормально отрисовывается
var spriteB:Sprite = new Sprite();
spriteB = clone(spriteA) as Sprite;
После всех манипуляций в spriteB попадает null

Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Если Ваш спрайт статичен, то можно его в BitmapData отрисовать.
Можно поподробнее?

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Код AS3:
public static function getBitmapDataOf(value: DisplayObject):BitmapData
{
	if (value && value.width > 0 && value.height > 0)
	{
		var bitmapData: BitmapData = new BitmapData(value.width, value.height, true, 0x00000000);
		var 
		m:Matrix = new Matrix();
		m.translate(-value.x, -value.y);
		m.scale(value.scaleX, value.scaleY);
		bitmapData.draw(value, m);
		return bitmapData;
	}
	else
	{
		return null;
	} 
}
И как то так:
Код AS3:
var spriteB:Sprite = new Sprite();
var bd:BitmapData = getBitmaDataOf(spriteA);
spriteB.addChild(new Bitmap(bd));
__________________
http://www.chessmax.ru

Старый 23.03.2012, 18:42
kimagg вне форума Посмотреть профиль Отправить личное сообщение для kimagg Найти все сообщения от kimagg
  № 7  
Ответить с цитированием
kimagg

Регистрация: Feb 2012
Сообщений: 18
Цитата:
Сообщение от carrotoff Посмотреть сообщение
Вот пример темы. Вот конкретный рецепт. Еще можно скопировать как массив байт
Пробовал то что там советуют, но заставить это работать не удалось =(.
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Код AS3:
public static function getBitmapDataOf(value: DisplayObject):BitmapData
{
	if (value && value.width > 0 && value.height > 0)
	{
		var bitmapData: BitmapData = new BitmapData(value.width, value.height, true, 0x00000000);
		var 
		m:Matrix = new Matrix();
		m.translate(-value.x, -value.y);
		m.scale(value.scaleX, value.scaleY);
		bitmapData.draw(value, m);
		return bitmapData;
	}
	else
	{
		return null;
	} 
}
И как то так:
Код AS3:
var spriteB:Sprite = new Sprite();
var bd:BitmapData = getBitmaDataOf(spriteA);
spriteB.addChild(new Bitmap(bd));
Выдает правильные пропорции, но битмапдата содержит пустое поле (черное, если создавать не прозрачное). Вы говорили, что этот метод для статичных спрайтов - т.е. если исходный спрайт продолжает жить своей жизнью (перемещаться, поворачиваться), то он (метод) непригоден?

Добавлено через 36 минут
Победа! Немного модифицировал ваш код:
Код AS3:
public static function getBitmapDataOf(value: DisplayObject):BitmapData
{
	if (value && value.width > 0 && value.height > 0)
	{
		var bitmap: BitmapData = new BitmapData(1600, 1200, true, 0x00CCCCCC);
		var m:Matrix = new Matrix();
		m.translate(800, 600);
		m.scale(value.scaleX, value.scaleY);
		bitmap.draw(value, m);
 
		var rect:Rectangle = bitmap.getColorBoundsRect(0xFFFFFFFF, 0x00CCCCCC, false);	
		var bitmapCut:BitmapData = new BitmapData(rect.width, rect.height, true, 0x00CCCCCC);
		bitmapCut.copyPixels(bitmap, rect, new Point(0,0));
		bitmap.dispose();
 
		return bitmapCut;
	}
	else
	{
		return null;
	} 
}

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

Регистрация: Feb 2012
Сообщений: 1,540
kimagg Неправильно!
Код AS3:
var bitmap: BitmapData = new BitmapData(1600, 1200, true, 0x00CCCCCC);
Ужас. Воспользуйтесь классом DisplayTool в моей библиотеке.
Вот:
Код AS3:
import com.mikroacse.display.utils.*;
 
public static function getBitmapDataOf(target:DisplayObject):BitmapData
{
	return DisplayTool.toBitmapData(target);
}

Старый 16.04.2012, 01:09
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Ужас. Воспользуйтесь классом DisplayTool в моей библиотеке.
В чем ужос , и поечму брать вашу билиотеку?
__________________
Марк Tween

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
В чем ужос , и поечму брать вашу билиотеку?
Цитата:
BitmapData(1600, 1200,
Ну, можно не мою

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

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

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


 


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


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