![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Apr 2010
Сообщений: 170
|
Всем доброго дня!
У меня есть Sprite, который будет в себе хранить Bitmap. Sprite можно было бы вообще не использовать, но пришлось, так как хочу задействовать его свойство scrollRect. В Bitmap будут рисоваться множество картинок. Проблема в следующем, чтобы создать BitmapData, нужно указать размер. Но я не могу знать точный размер, точнее мне сложно его рассчитать, так как в него будут копироваться изометрические тайлы. Сейчас у меня код такой: 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); } } |
|
|||||
|
Сначала циклом посчитайте общий размер, и потом отрисовывайте
Добавлено через 7 минут Не проверял правильно или нет... но все же : 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. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 170
|
Либо рассчитать позиции крайних объектов и на основании их координат рассчитать занимаемую ими прямоугольную область.
|
|
|||||
|
А что мешает в цикле насоздавать битмап в некоем контейнере. А потом весь этот контейнер отрисовать в битмапдату?
Добавлено через 3 минуты 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. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 170
|
Ну я пока так сделал:
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; |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|