![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Итак, у меня есть такая маленькая функция для перерисовывания объекта в BitmapData:
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; } А вот с поворотами проблема. Что здесь надо добавить, чтобы матрица повернулась на заданный угол? Не работает ![]() Нужна срочная помощь. Добавлено через 3 минуты Кстати, toRect: |
|
|||||
|
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Сейчас попробую...
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
![]() Код Main.as: 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); } } } 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); } } } } Последний раз редактировалось MikroAcse; 29.03.2012 в 21:39. |
|
|||||
|
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
а зачем вы транслэйт делаете если в конструктуре 5 и 6 параметры задают оффсет?
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
А если точка регистрации объекта не слева сверху?
Без этого параметра, перерисованный квадрат вообще не будет видно. |
|
|||||
|
На своем опыте скажу, НИКОГДА не используйте не стандартную точку регистрации. По началу кажется удобно, потом замучаетесь.
__________________
adobe AS3 manual |
|
|||||
|
Вчера запускал ваш код, все работает, только у вас не правильный
, rect.width, rect.height - попробуйте поставить 500,500 и посмотрите.
Добавлено через 1 минуту Хотя вру, я делал так :
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Все, справился, спасибо всем.
Особенно Genzo. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|