Показать сообщение отдельно
Старый 07.01.2009, 23:51
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 9  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Вот очень полезный класс (для установки точки регистрации на лету):

Код AS3:
package
{
	import flash.display.MovieClip;
	import flash.geom.Point;
 
	/**
	 * Extends MovieClip adding a dynamic registration point
	 *
	 * Based on AS2 work by Darron Schall (www.darronschall.com)
	 * Original AS1 code by Robert Penner (www.robertpenner.com)
	 *
	 * @author Oscar Trelles
	 * @version 1.0
	 * @created 12-Mar-2007 11:53:50 AM
	 */
	public class DynamicMovie extends MovieClip
	{
		public var rp:Point;
 
		function DynamicSprite()
		{
			setRegistration();
		}
 
		public function setRegistration(x:Number=0, y:Number=0):void
		{
			rp = new Point(x, y);
		}
 
		public function get x2():Number
		{
			var p:Point = this.parent.globalToLocal(this.localToGlobal(rp));
			return p.x;
		}
 
		public function set x2(value:Number):void
		{
			var p:Point = this.parent.globalToLocal(this.localToGlobal(rp));
			this.x += value - p.x;
		}
 
		public function get y2():Number
		{
			var p:Point = this.parent.globalToLocal(this.localToGlobal(rp));
			return p.y;
		}
 
		public function set y2(value:Number):void
		{
			var p:Point = this.parent.globalToLocal(this.localToGlobal(rp));
			this.y += value - p.y;
		}
 
		public function get scaleX2():Number
		{
			return this.scaleX;
		}
 
		public function set scaleX2(value:Number):void
		{
			this.setProperty2("scaleX", value);
		}
 
		public function get scaleY2():Number
		{
			return this.scaleY;
		}
 
		public function set scaleY2(value:Number):void
		{
			this.setProperty2("scaleY", value);
		}
 
		public function get rotation2():Number
		{
			return this.rotation;
		}
 
		public function set rotation2(value:Number):void
		{
			this.setProperty2("rotation", value);
		}
 
		public function get mouseX2():Number
		{
			return Math.round(this.mouseX - rp.x);
		}
 
		public function get mouseY2():Number
		{
			return Math.round(this.mouseY - rp.y);
		}
 
		public function setProperty2(prop:String, n:Number):void
		{
			var a:Point = this.parent.globalToLocal(this.localToGlobal(rp));
 
			this[prop] = n;
 
			var b:Point = this.parent.globalToLocal(this.localToGlobal(rp));
 
			this.x -= b.x - a.x;
			this.y -= b.y - a.y;
		}
	}
}
Единственное, он появился раньше чем вращение по Y, но думаю что его можно дописать по аналогии.

По второму пункту. Почитай в хелпе про projectionCenter (это точка горизонта) - если она находится, не точно под плоскостью вращения, а например в крайнем левом углу, мы можем увидеть перпендикулярные плоскости и чем больше расстояние от точки горизонта, тем они виднее. Если же необходимо чтобы 270 было 270 больше чем для одного объекта - рисуй их через drawTriangles - Есть статья у сенокуляра: http://www.senocular.com/flash/tutor...h10drawingapi/


Последний раз редактировалось Rzer; 08.01.2009 в 00:07.