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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 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

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

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

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


 


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


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