|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
MouseEvent и сброс TextFormat
Есть небольшой код:
package { import flash.display.*; import flash.text.*; import flash.events.*; public class MouseTrigger extends Sprite { private var text1:TextField; private var text2:TextField; private var format1:TextFormat; private var format2:TextFormat; private var clickCounter:uint = 0; private var overCounter:uint = 0; public function MouseTrigger() { textInit(); mouseInit(); } private function textInit() { //--- MouseClick textfield ---// text1 = new TextField(); text1.text = "MouseClick"; text1.x = 50; text1.y = 50; text1.selectable = false; text1.autoSize = TextFieldAutoSize.LEFT; format1 = new TextFormat(); format1.color = 0xCCCC00; format1.font = "Verdana"; format1.size = 25; text1.setTextFormat(format1); addChild(text1); //--- MouseOver textfield ---// text2 = new TextField(); text2.text = "MouseOver"; text2.x = 50; text2.y = 150; text2.selectable = false; text2.autoSize = TextFieldAutoSize.LEFT; format2 = new TextFormat(); format2.color = 0x00CCCC; format2.font = "Verdana"; format2.size = 25; text2.setTextFormat(format2); addChild(text2); } private function mouseInit() { text1.addEventListener(MouseEvent.CLICK, clickTrigger); text2.addEventListener(MouseEvent.MOUSE_OVER, overTrigger); } private function clickTrigger(e:MouseEvent) { clickCounter ++; text1.text = "MouseClick: triggered " + clickCounter.toString() + " times"; } private function overTrigger(e:MouseEvent) { overCounter ++; text2.text = "MouseOver: triggered " + overCounter.toString() + " times"; } } } После нажатия на текстфилд1 (или после наведения на текстфилд2) его TextFormat почему-то сбрасывается в дефолтный. Это нормально, или какой-то баг? Что сделать, чтобы такого не было? (Хотя, один вариант я вижу: в обработчике события снова запускать функцию setTextFormat(), но такое решение не очень оптимальное, походу дела.) |
|
|||||
Первое что нужно сделать это
и внедрить шрифт Veranda. Добавлено через 1 минуту +
__________________
return this... |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
AlexCooper, аа, дефолт формат... спасибо, идею понял.
Шрифт наверное все-таки Verdana имелся ввиду. Ок, переделал код так: package { import flash.display.*; import flash.text.*; import flash.events.*; public class MouseTrigger extends Sprite { private var text1:TextField; private var text2:TextField; private var format1:TextFormat; private var format2:TextFormat; private var clickCounter:uint = 0; private var overCounter:uint = 0; public function MouseTrigger() { textInit(); mouseInit(); } private function textInit() { //--- MouseClick textfield ---// format1 = new TextFormat(); format1.color = 0xCCCC00; format1.font = "Verdana"; format1.size = 25; text1 = new TextField(); text1.text = "MouseClick"; text1.x = 50; text1.y = 50; text1.selectable = false; // text1.embedFonts = true; text1.autoSize = TextFieldAutoSize.LEFT; text1.defaultTextFormat = format1; addChild(text1); //--- MouseOver textfield ---// format2 = new TextFormat(); format2.color = 0x00CCCC; format2.font = "Verdana"; format2.size = 25; text2 = new TextField(); text2.text = "MouseOver"; text2.x = 50; text2.y = 150; text2.selectable = false; // text2.embedFonts = true; text2.autoSize = TextFieldAutoSize.LEFT; text2.defaultTextFormat = format2; addChild(text2); } private function mouseInit() { text1.addEventListener(MouseEvent.CLICK, clickTrigger); text2.addEventListener(MouseEvent.MOUSE_OVER, overTrigger); } private function clickTrigger(e:MouseEvent) { clickCounter ++; text1.text = "MouseClick: triggered " + String(clickCounter) + " times"; } private function overTrigger(e:MouseEvent) { overCounter ++; text2.text = "MouseOver: triggered " + String(overCounter) + " times"; } } } Однако, и в такой реализации возникает симметрично-противоположный перекос. Теперь до нажатия кнопок мы имеем стандартный системный формат, и только после нажатия он изменяется в defaultTextFormat. |
|
|||||
Цитата:
__________________
return this... |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
AlexCooper, понятно.
Но ведь это весьма избыточный путь, неужели нет более простого решения? Проще в обработчике еще раз setTextFormat() кастануть, например. |
|
|||||
Цитата:
Добавлено через 3 минуты Цитата:
__________________
return this... |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Цитата:
Для СS3 этой опции нет, и алгоритм внедрения шрифта немного отличен от описанного по ссылке. Но это не принципиально, разумеется. Но акцент на момент задания вопроса, был еще и поэтому. Цитата:
И что системные шрифты типа Verdana будут правильно внедряться автоматически, только на базе кодов для textField и textFormat. Цитата:
Да, я уже его проимпортировал, теперь всё работает как надо. ( Отмечу, для тех кому это интересно: при внедрении в CS3 нужно указывать не имя шрифта, как, казалось бы в данном случае должно было быть format1.font = new Verdana().fontName; а значение для Field Symbol Properties: Name, которое задается производьно, то есть например в моем случае: format1.font = new Embed1().fontName; ) Осталось, разве что, непонятным, почему MouseEvent слушатели сбрасывают формат. Ведь должен же быть какой-то механизм, что-то же там происходит. Или может быть это функция преобразования числа в строку такое делает. |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Исходя из предоставленного вами кода, то получается, что как раз при событии мыши и устанавливается defaultTextFormat, который вы определили.
http://help.adobe.com/ru_RU/FlashPla...aultTextFormat А чтобы изначально текст был отформатирован согласно вашего TextFormat, тогда добавьте перед добавлением текстового поля в список отображения. Шрифт будет все время такой, каким вы его задали в format1. |
|
|||||
Цитата:
Цитата:
__________________
return this... |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Хм, странно. У меня вот такая версия (портабельная):
И в ней, по опции: Есть лишь такое меню: И затем, когда шрифт добавлен, есть еще контекстное меню: В коротом пункт Linkage: И это всё что есть. |
Часовой пояс GMT +4, время: 11:04. |
|
« Предыдущая тема | Следующая тема » |
Теги |
default , MouseEvent , setTextFormat , сброс |
|
|