Показать сообщение отдельно
Старый 13.10.2014, 21:40
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Сменить координаты маски.

Вопрос не сложный, но что-то запутался.

Мне нужно натянуть текстуру на текст - цифра "8" допустим.

Код AS3:
num = new TextField (200, 250, '', 'Arial', 200);
addChild(num);
num.text = '8';
 
image = new ImageLoader();
image.source = 'assets/7.jpg';// текстура
image.addEventListener(Event.COMPLETE, imageLoaded);
 
bg = new MaskedSprite();
addChild(bg);
bg.addChild(image);
bg.mask = num;
Собственно класс MaskedSprite
Код AS3:
public class MaskedSprite extends Sprite
	{
		public var mask:DisplayObject;
		private static const MASK_MODE_INVERTED:String = "maskinverted";
 
		public function MaskedSprite()
		{
			BlendMode.register(MASK_MODE_INVERTED, Context3DBlendFactor.ZERO, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA, false);
		}
 
		override public function render(support:RenderSupport, parentAlpha:Number):void
		{
			var _this:MaskedSprite = this;
 
			if (mask != null)
			{
				RenderTexturePool.instance.getTemporal(function(eraserTexture:RenderTexture):void {
					RenderTexturePool.instance.getTemporal(function(composedTexture:RenderTexture):void {
						eraserTexture.clear();
						composedTexture.clear();
 
						eraserTexture.draw(new Quad(eraserTexture.width, eraserTexture.height, 0xFFFFFF)); 
						mask.blendMode =  BlendMode.ERASE;
 
						mask.visible = true;
						eraserTexture.draw(mask, mask.getTransformationMatrix(Starling.current.root));
						mask.visible = false;
 
						for (var n:int = 0; n < numChildren; n++) composedTexture.draw(getChildAt(n), support.modelViewMatrix);
 
						var eraserImage:Image = new Image(eraserTexture);
						eraserImage.blendMode = MASK_MODE_INVERTED;
 
						composedTexture.draw(eraserImage);
 
						support.pushMatrix();
						support.loadIdentity();
						new Image(composedTexture).render(support, parentAlpha);
						support.popMatrix();
					});
				});
			}
			else
			{
				super.render(support, parentAlpha);
			}
		}
	}
Все отлично, все работает. Но теперь мне нужно сдвинуть либо текстуру так чтобы маска была в её пределах, либо маску в пределах текстуры. И получается что либо маска обрезается, либо вообще ничего не видно.
Где можно задать координаты маски или текстуры?
__________________
In Code We Trust