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

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

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

Регистрация: Feb 2012
Сообщений: 1,540
По умолчанию BitmapData.draw || Поворот в Matrix

Итак, у меня есть такая маленькая функция для перерисовывания объекта в BitmapData:
Код AS3:
public static function toBitmapData(target:DisplayObject):BitmapData {
		var rect:Rectangle=toRect(target);
		var bmd:BitmapData=new BitmapData(rect.width, rect.height, true, 0);
		var mtrx:Matrix = new Matrix(target.scaleX, 0, 0, target.scaleY, target.x, target.y);
 
		mtrx.translate( -rect.left, -rect.top);
 
		bmd.draw(target, mtrx);
		return bmd;
}
Все работает нормально, scaleX и scaleY нормально перерисовывает.
А вот с поворотами проблема.
Что здесь надо добавить, чтобы матрица повернулась на заданный угол?
Код AS3:
mtrx.rotate(Math.PI * (180/target.rotation))
Не работает
Нужна срочная помощь.

Добавлено через 3 минуты
Кстати, toRect:
Код AS3:
public static function toRect(target:DisplayObject):Rectangle {
	var main:Stage=target.root.stage;
	var rect:Rectangle=target.getBounds(main);
	return rect;
}

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Поидее
Код AS3:
mtrx.rotate(target.rotation * Math.PI/180);
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

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

Регистрация: Feb 2012
Сообщений: 1,540
Сейчас попробую...

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

Регистрация: Feb 2012
Сообщений: 1,540

Код Main.as:
Код AS3:
package {
	import com.mikroacse.display.utils.*;
	import com.mikroacse.display.utils.log.*;
	import com.mikroacse.motion.*;
	import com.mikroacse.motion.easing.*;
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	import flash.filters.*;
	import flash.system.System;
	/**
	 * ...
	 * @author MikroAcse studio
	 */
 
	public class Main extends Sprite {
		public var obj1:DisplayObject;
		public var obj2:DisplayObject;
 
		public function Main():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			this.loaderInfo.addEventListener(Event.COMPLETE, start);
		}
 
		private function start(e:Event):void {
			obj2 = addChild(DrawTool.newCircle([200, 200, 50], [0x0000FF]));
			obj1 = addChild(DrawTool.newBox([-25, -25, 50, 50], [0xFF0000]));
 
			obj1.scaleX = 0.5;
			obj2.scaleY = 2;
			obj1.rotation = 10;
			obj1.x = obj1.y = 100;
 
			DisplayTool.toBitmapData(obj1);
		}
	}
 
}
Код DisplayTool.as:
Код AS3:
package  com.mikroacse.display.utils {
	import com.mikroacse.utils.*;
	import flash.display.*;
	import flash.geom.*;
 
		public static function toBitmapData(target:DisplayObject):BitmapData {
			var rect:Rectangle = toRect(target);
			var bmd:BitmapData = new BitmapData(rect.width, rect.height, true, 0);
			var mtrx:Matrix = new Matrix(target.scaleX, 0, 0, target.scaleY, target.x, target.y);
 
 
			mtrx.translate( -rect.left, -rect.top);
			mtrx.rotate(target.rotation * Math.PI/180);
 
			bmd.draw(target, mtrx);
			target.root.stage.addChild(new Bitmap(bmd));
			return bmd;
		}
 
		public static function toRect(target:DisplayObject):Rectangle {
			var main:Stage=target.root.stage;
			var rect:Rectangle=target.getBounds(main);
			return rect;
		}
 
		public static function addChilds(container:DisplayObjectContainer, ...childs):void {
			for (var i:uint = 0; i < childs.length; i++) {
				container.addChild(childs[i] as DisplayObject);
			}
		}
	}
}
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 67
Размер:	22.0 Кб
ID:	27767  


Последний раз редактировалось MikroAcse; 29.03.2012 в 21:39.
Старый 29.03.2012, 21:26
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 5  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
а зачем вы транслэйт делаете если в конструктуре 5 и 6 параметры задают оффсет?

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

Регистрация: Feb 2012
Сообщений: 1,540
А если точка регистрации объекта не слева сверху?
Без этого параметра, перерисованный квадрат вообще не будет видно.

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
На своем опыте скажу, НИКОГДА не используйте не стандартную точку регистрации. По началу кажется удобно, потом замучаетесь.
__________________
adobe AS3 manual

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Вчера запускал ваш код, все работает, только у вас не правильный
Код AS3:
var bmd:BitmapData = new BitmapData(rect.width, rect.height, true, 0);
, rect.width, rect.height - попробуйте поставить 500,500 и посмотрите.

Добавлено через 1 минуту
Хотя вру, я делал так :
Код AS3:
var mtrx:Matrix = target.transform.matrix.clone();
bmd.draw(target, mtrx);
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

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

Регистрация: Feb 2012
Сообщений: 1,540
Все, справился, спасибо всем.
Особенно Genzo.

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

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

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


 


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


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