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

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

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

Регистрация: Dec 2010
Сообщений: 177
Attention Прорисовка клипа в BitmapData с сохранением масштабирования

- Создаю черный круг (BallVis)
- Увеличиваю/масштабирую его размер по ширине, через свойство width/scaleX.
- Создаю объект BitmapData и ф-ей draw() прорисовываю BallVis используя для расположения матрицу.

В итоге BallVis появляется на экране, но не увеличенный по ширине? Вероятно, в матрицу нужно добавить как-то параметры width/scaleX…


Код AS3:
import flash.display.BitmapData;
 
var objMatrix:Matrix = new Matrix();
 
var ball:BallVis = new BallVis();
//this.addChild(ball);
ball.x = 320;
ball.y = 200;
 
var deltaSize:Number = 100;
ball.width+= deltaSize;
//ball.scaleX = 2;
 
var objectsMap:BitmapData = new BitmapData(640, 480, true, 0x00000000);
var objectBitmap:Bitmap = new Bitmap(objectsMap);
this.addChild(objectBitmap);
 
objMatrix.tx= ball.x;
objMatrix.ty= ball.y;
waterMatrix.scale(ball.scaleX);
 
objectsMap.draw(ball, objMatrix);

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
import flash.display.BitmapData;
 
var ball:BallVis = new BallVis();
ball.x = 320;
ball.y = 200;
 
var deltaSize:Number = 100;
ball.width+= deltaSize;
 
var objectsMap:BitmapData = new BitmapData(640, 480, true, 0x00000000);
var objectBitmap:Bitmap = new Bitmap(objectsMap);
this.addChild(objectBitmap);
 
 
objectsMap.draw(ball, ball.transform.matrix);

Старый 05.01.2013, 13:29
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 3  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
Дело в том, в реальной программе visual.x/y= 0, получается что мне нужно взять масштабирование у матрицы объекта, а вот положение из физического тела.
Делаю так (body.Item.visual - это условно ball):

Код:
item.visual.transform.matrix.tx = item.body.position.x;
item.visual.transform.matrix.ty = item.body.position.y;

//Но, почему то после присваивания положения item.visual.transform.matrix.tx равен нулю
(хотя в item.body.position.x = 400) ?
objectsMap.draw(item.visual, item.visual.transform.matrix);

Можно, конечно обновить x/y визуального объекта, но в моем случае у меня все будет притормаживать,
в сцене больше 200 физ. объектов, и все работает норм, если не трогать item.visual.x/y,
а сразу прорисовать в битмапу с помощью матрицы.
Код AS3:
item.visual.x = item.body.position.x;
item.visual.y = item.body.position.y;
objectsMap.draw(item.visual, item.visual.transform.matrix);


Последний раз редактировалось Alexmody; 05.01.2013 в 13:45.
Старый 05.01.2013, 14:24
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Код AS3:
package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Matrix;
 
	[SWF(width="640",height="480",frameRate="30")]
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public function Main():void {
			super();
 
			if (stage) {
				onAddedToStage();
			} else {
				super.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			}
		}
 
		private function onAddedToStage(e:Event = null):void {
			super.removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			super.stage.scaleMode = StageScaleMode.NO_SCALE;
			super.stage.align = StageAlign.TOP_LEFT;
 
			const shape:Shape = new Shape();
			shape.x = 0;
			shape.y = 0;
			shape.graphics.beginFill(0x008080);
			shape.graphics.drawCircle(50, 50, 50);
			shape.graphics.endFill();
 
			shape.x = 100;
			shape.y = 100;
			shape.scaleX = 2;
 
			const bitmapData:BitmapData = new BitmapData(640, 480, true, 0x000000);
			const bitmap:Bitmap = new Bitmap(bitmapData);
 
			bitmapData.draw(shape, new Matrix(shape.scaleX, 0, 0, shape.scaleY, shape.x, shape.y));
			super.addChild(bitmap);
		}
	}
}
__________________
местонахождение

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

Регистрация: Dec 2010
Сообщений: 177
Спасибо всем, примерно так и сделал:

Код AS3:
waterMatrix.a = item.visual.transform.matrix.a;
waterMatrix.d = item.visual.transform.matrix.d;
waterMatrix.tx= item.body.position.x;
waterMatrix.ty = item.body.position.y;
objectsMap.draw(item.visual, waterMatrix);

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
небольшой оффтоп.
Код AS3:
item.visual.transform.matrix
каждый раз создает новую матрицу, это конечно может быть и не критично, но я бы обошелся без этого.
ну и вместо вместо a=.d= существует метод scale, а вместо tx=,ty= translate, для изменения всех параметров setTo
__________________
местонахождение

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

Регистрация: Dec 2010
Сообщений: 177
>>каждый раз создает новую матрицу, это конечно может быть и не критично, но я бы обошелся без этого.
Да, спасибо я уже в объекте создал переменные хранящие скейл матрицы a/d, чтобы не обращаться к геттеру.

Старый 06.01.2013, 00:07
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 8  
Ответить с цитированием
gagaga
[+1 22.04.13]
[+1 06.03.13]

Регистрация: Apr 2012
Сообщений: 239
waterMatrix - это что?


Последний раз редактировалось gagaga; 06.01.2013 в 00:20.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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