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

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

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
По умолчанию Проблема с маской TextField'а

Здравствуйте,
У меня такая проблемка возникла. Создал Sprite добавил в список отображения мой динамический TextField и добавил в тот же список маску для этого TextField'а в виде Shape (.drawRect(...)), присвоил textField.mask = mymask, написал функционал скроллинга для текста, но вот беда: при перемещении TextField под маской (его скроллинга) маска постепенно тоже смещается, конечно не так сильно как сам текст, но все равно, я же ее (маску) не двигаю, и ее родителя тоже не двигаю, и координаты у нее (0,0) остаются.
Как сделать чтобы все нормально работало, т.е. маска стояла, а текст под ней двигался???

Старый 31.08.2010, 13:44
TWETTI вне форума Посмотреть профиль Отправить личное сообщение для TWETTI Найти все сообщения от TWETTI
  № 2  
Ответить с цитированием
TWETTI
 
Аватар для TWETTI

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Можете показать исходник?

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Код AS3:
var tf:TextField = new TextField();
tf.mouseWheelEnabled = false;
tf.width = 400;
tf.text = "Большой и длинный текст";
tf.height = 400;
tf.background = true;
tf.backgroundColor = 0xff0000;
var m:Shape = new Shape();
m.graphics.beginFill(0x000000);
m.graphics.drawRect(0,0,200,200);
m.graphics.endFill();
tf.mask = m;
var :Sprite = new Sprite();
holder.rotationZ = -10;
holder.addChild(tf);
holder.addChild(m);
this.addChild(holder);
this.rotationX = -10;//повороты нужны может в них проблема
this.rotationY = -10;
tf.addEventListener(MouseEvent.MOUSE_WHEEL,wheelText);
private function wheelText(ev:MouseEvent):void
{
tf.y += ev.delta;
//плюс там ограничения на перемещения
}
при прокрутке вниз (текст при этом наоборот поднимается) маска приподнимается, при этом ее края начинают обрезать и левую и нижнюю границы текста а верхнюю и правую наоборот расширяют

Такое ощущение просто поднимается проекция маски на экран


Последний раз редактировалось zatoichi; 31.08.2010 в 18:25.
Старый 31.08.2010, 14:07
TWETTI вне форума Посмотреть профиль Отправить личное сообщение для TWETTI Найти все сообщения от TWETTI
  № 4  
Ответить с цитированием
TWETTI
 
Аватар для TWETTI

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Вот так должно быть?
Вложения
Тип файла: swf Main.swf (1,018 байт, 74 просмотров)

Старый 31.08.2010, 14:16
zatoichi вне форума Посмотреть профиль Отправить личное сообщение для zatoichi Найти все сообщения от zatoichi
  № 5  
Ответить с цитированием
zatoichi
 
Аватар для zatoichi

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Это же всего лишь класс (код конструктора) , экземпляр которого нужно добавить к root, а еще забыл
Код AS3:
tf.wordWrap = true;
Просто проще так было написать чем вырезать из кода в 1000 строк то, что именно касается этого функционала.

Добавлено через 2 минуты
Тем более загрузка текста там идет определенным образом из ссылки переданной в xml и прочие дела


Последний раз редактировалось zatoichi; 31.08.2010 в 14:20.
Старый 31.08.2010, 14:35
TWETTI вне форума Посмотреть профиль Отправить личное сообщение для TWETTI Найти все сообщения от TWETTI
  № 6  
Ответить с цитированием
TWETTI
 
Аватар для TWETTI

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Чтобы нарисовать маску этого недостаточно. Надо вот так:
Код AS3:
m.graphics.beginFill(0x000000);
m.graphics.drawRect(0,0,400,300);
m.graphics.endFill();

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Согласен, и это не написал, уже исправил, но это не касается самого вопроса.. Дело то не в этом, маска работает и текст маскируется, т.е. за границами маски текста не видно, но область видимого текста смещается. Для лучшей наглядности попробуйте залить фон текстового поля. Да, кстати в root установлены .perspectiveProjection.focalLength = 1000, .perspectiveProjection.projectionCenter = new Point(xcen,ycen) по центру сцены

Ну, кто-нибудь, скажите что думаете по этому поводу. TWETTI ну как? Получили такой же результат?

Добавлено через 5 часов 32 минуты
Обнаружил такие закономерности. Получается, что маска вообще не смещается и ее глобальные координаты остаются прежними (странно как-то), но если маскируемый объект, находящийся в иерархии по-разному повернутых в 3d контейнеров, мы начинаем двигать, то область отображения этого маскированного объекта начинает как-то смещаться, это можно исправить, двигая маску вместе с объектом, но не через изменение ее координат x и y, а просто сделав маску child'ом для этого объекта, тогда все нормально, однако как для textField'а создать ребенка я не знаю, но для sprite всё проканывает.
И еще если вышеназванный код писать в кадре root-мувиклипа, а не в отдельном классе, то такой проблемы вообще не возникает, что для меня не понятно.

Добавлено через 18 часов 6 минут
Всем на заметку: Оказывается отображаемая часть маскированного объекта - это лишь проекция объекта маски от точки (xObj,yObj,Infinity) на плоскость z = -stage.perspectiveProjection.focalLength.


Последний раз редактировалось zatoichi; 31.08.2010 в 20:19.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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