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

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

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

Регистрация: Apr 2010
Сообщений: 170
По умолчанию Расчет размеров BitmapData::Draw()

Всем доброго дня!

У меня есть Sprite, который будет в себе хранить Bitmap. Sprite можно было бы вообще не использовать, но пришлось, так как хочу задействовать его свойство scrollRect. В Bitmap будут рисоваться множество картинок. Проблема в следующем, чтобы создать BitmapData, нужно указать размер. Но я не могу знать точный размер, точнее мне сложно его рассчитать, так как в него будут копироваться изометрические тайлы. Сейчас у меня код такой:

Код AS3:
for(var j:uint=0;j<mapRows;j++)
{
	for(var i:uint=0;i<mapColumns;i++)
	{
		var bitmap:Bitmap=Bitmap(mapFields.GetOnID(fields[j*mapColumns+i].area).loader.content);
		var bitmapData:BitmapData=new BitmapData(bitmap.width,bitmap.height,true,0);
 
		bitmapData.draw(bitmap);
 
		var image:Bitmap=new Bitmap(bitmapData);
 
		image.x=0+(i*listAllFields.fieldWidth/2)-(j*listAllFields.fieldWidth/2);
		image.y=0+(i*listAllFields.fieldHeight/2)+(j*listAllFields.fieldHeight/2);
 
		layerGround.addChild(image);
	}
}
Но тут получается что в layerGround хранится множество изображений. А я хочу чтобы только одно. Можно как-то выкрутиться?

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

блогер
Регистрация: Jul 2010
Сообщений: 117
Записей в блоге: 4
Не стоит в цикле создавать bitmapData много раз.
Вы можете использовать одну и ту же картинку много раз, а сами объекты Bitmap занимают немного
__________________
Не бойся, если ты один. Бойся, если ты ноль

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Сначала циклом посчитайте общий размер, и потом отрисовывайте

Добавлено через 7 минут
Не проверял правильно или нет... но все же :
Код AS3:
var totalHeight:Number , totalWidth:Number;
for(var j:uint=0;j<mapRows;j++)
{
	for(var i:uint=0;i<mapColumns;i++)
	{
		var do:DisplayObject = mapFields.GetOnID(fields[j*mapColumns+i].area).loader.content as DisplayObject;
		if(i == 0){
			totalHeight += do.height;
		}
		totalWidth += do.width;
	}
}
var bitmapData:BitmapData=new BitmapData(totalHeight,totalWidth,true,0);
 
for(var j:uint=0;j<mapRows;j++)
{
	for(var i:uint=0;i<mapColumns;i++)
	{	
		var do:DisplayObject = mapFields.GetOnID(fields[j*mapColumns+i].area).loader.content as DisplayObject;
		var matrix:Matrix = new Matrix();
		matrix.translate((i*listAllFields.fieldWidth/2)-(j*listAllFields.fieldWidth/2) , (i*listAllFields.fieldHeight/2)+(j*listAllFields.fieldHeight/2));
		bitmapData.draw(do, matrix);
	}
}
var image:Bitmap=new Bitmap(bitmapData);
layerGround.addChild(image);
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.


Последний раз редактировалось Genzo; 31.01.2012 в 17:10.
Старый 31.01.2012, 17:35
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 4  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
Либо рассчитать позиции крайних объектов и на основании их координат рассчитать занимаемую ими прямоугольную область.

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
А что мешает в цикле насоздавать битмап в некоем контейнере. А потом весь этот контейнер отрисовать в битмапдату?

Добавлено через 3 минуты
Код AS3:
for(var j:uint=0;j<mapRows;j++)
{
	for(var i:uint=0;i<mapColumns;i++)
	{
		var image:Bitmap = Bitmap(mapFields.GetOnID(fields[j*mapColumns+i].area).loader.content);
		image.x=0+(i*listAllFields.fieldWidth/2)-(j*listAllFields.fieldWidth/2);
		image.y=0+(i*listAllFields.fieldHeight/2)+(j*listAllFields.fieldHeight/2);
 
		layerGround.addChild(image);
	}
}
var bmd:BitmapData = new BitmapData(layerGround.width, layerGround.height);
bmd.draw(layerGround);
var layerGroundBitmap:Bitmap = new Bitmap(bmd);
addChild(layerGroundBitmap);
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 31.01.2012 в 18:08.
Старый 31.01.2012, 18:06
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 6  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
Ну я пока так сделал:

Код AS3:
var imageWidth:uint=0;
var imageHeight:uint=0;
var mapX1:int=0;
var mapY1:int=0;
var mapX2:int=0;
var mapY2:int=0;
 
mapX1=(0*Game.fieldWidth/2)-((map.mapRows-1)*Game.fieldWidth/2);
mapY1=(0*Game.fieldHeight/2)+(0*Game.fieldHeight/2);
 
mapX2=((map.mapColumns-1)*Game.fieldWidth/2)-(0*Game.fieldWidth/2);
mapY2=((map.mapColumns-1)*Game.fieldHeight/2)+((map.mapRows-1)*Game.fieldHeight/2);
 
imageWidth=(-1*mapX1)+mapX2;
imageHeight=mapY1+mapY2;

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Короче, я ничего не понял. Но, если вы хотите из многих картинок создать одну - см. пост №5.
__________________
Я мало чего умею, но зато хорошо умею учиться...

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

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

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


 


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


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