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

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

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

Регистрация: Mar 2013
Сообщений: 290
Post MouseEvent и сброс TextFormat

Есть небольшой код:

Код AS3:
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(), но такое решение не очень оптимальное, походу дела.)

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Первое что нужно сделать это
Код AS3:
text1.embedFonts =
text2.embedFonts = true;
и внедрить шрифт Veranda.

Добавлено через 1 минуту
+
Код AS3:
text1.defaultTextFormat = format1;
text2.defaultTextFormat = format2;
__________________
return this...

Старый 01.08.2013, 11:47
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 3  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
AlexCooper, аа, дефолт формат... спасибо, идею понял.
Шрифт наверное все-таки Verdana имелся ввиду.

Ок, переделал код так:

Код AS3:
 
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";
 
 
			}
 
		}
 
}
Строки с embedFonts закаментировал, потому-что, с ними, получается вообще ПУСТОЙ ЭКРАН (почему?)

Однако, и в такой реализации возникает симметрично-противоположный перекос.
Теперь до нажатия кнопок мы имеем стандартный системный формат, и только после нажатия он изменяется в defaultTextFormat.

Старый 01.08.2013, 11:52
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Строки с embedFonts закаментировал, потому-что, с ними, почему-то вообще ПУСТОЙ ЭКРАН (почему?)
Потому что шрифт не внедрён в флеш.
__________________
return this...

Старый 01.08.2013, 12:13
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 5  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
AlexCooper, понятно.

Но ведь это весьма избыточный путь, неужели нет более простого решения?

Проще в обработчике еще раз setTextFormat() кастануть, например.

Старый 01.08.2013, 12:20
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 6  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Но ведь это весьма избыточный путь, неужели нет более простого решения?
О каком избытке идёт речь? При внедрении шрифта выбираете диапазоны используемых символов, в чем избыток? Вы не понимаете зачем нужно внедрять шрифт в плеер? Для того чтобы он правильно отображался. Это все равно что не заправлять машину бензином, потому что она становиться тяжелее и говорить, может как-то я буду просто сзади толкать, так и поедим.

Добавлено через 3 минуты
Цитата:
Проще в обработчике еще раз setTextFormat() кастануть, например.
Я Вам написал как нужно (не говоря уже об программном импорте), хотите делать через Ж, делайте через Ж. Позже все равно придется импортировать шрифт.
__________________
return this...

Старый 02.08.2013, 12:09
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 7  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
О каком избытке идёт речь?
Имелось ввиду, что (как оказывается), такую задачу нельзя решить чисто кодом AS3.0, без привлечения манипуляций с интерфейсом.

Код AS3:
При внедрении шрифта выбираете диапазоны используемых символов
Для СS3 этой опции нет, и алгоритм внедрения шрифта немного отличен от описанного по ссылке.
Но это не принципиально, разумеется. Но акцент на момент задания вопроса, был еще и поэтому.

Цитата:
Вы не понимаете зачем нужно внедрять шрифт в плеер? Для того чтобы он правильно отображался.
Да, я действительно этого не понимал. Мне казалось, что внедрение шрифтов нужно только для случаев сторонних, экзотических шрифтов.
И что системные шрифты типа Verdana будут правильно внедряться автоматически, только на базе кодов для textField и textFormat.

Цитата:
Я Вам написал как нужно (не говоря уже об программном импорте), хотите делать через Ж, делайте через Ж. Позже все равно придется импортировать шрифт.
Если бы я хотел сделать через Ж, то не создавал бы этот пост.
Да, я уже его проимпортировал, теперь всё работает как надо.

( Отмечу, для тех кому это интересно: при внедрении в CS3 нужно указывать не имя шрифта, как, казалось бы в данном случае должно было быть format1.font = new Verdana().fontName; а значение для Field Symbol Properties: Name, которое задается производьно, то есть например в моем случае: format1.font = new Embed1().fontName; )

Осталось, разве что, непонятным, почему MouseEvent слушатели сбрасывают формат.
Ведь должен же быть какой-то механизм, что-то же там происходит.
Или может быть это функция преобразования числа в строку такое делает.

Старый 02.08.2013, 12:50
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 8  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Исходя из предоставленного вами кода, то получается, что как раз при событии мыши и устанавливается defaultTextFormat, который вы определили.
http://help.adobe.com/ru_RU/FlashPla...aultTextFormat
А чтобы изначально текст был отформатирован согласно вашего TextFormat, тогда добавьте перед добавлением текстового поля в список отображения.
Код AS3:
text1.setTextFormat(format1);
addChild(text1);
Шрифт будет все время такой, каким вы его задали в format1.

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Для СS3 этой опции нет, и алгоритм внедрения шрифта немного отличен от описанного по ссылке
как нет? смотрите картинку ниже

Цитата:
( Отмечу, для тех кому это интересно: при внедрении в CS3 нужно указывать не имя шрифта, как, казалось бы в данном случае должно было быть format1.font = new Verdana().fontName; а значение для Field Symbol Properties: Name, которое задается произвольно, то есть например в моем случае: format1.font = new Embed1().fontName; )
Так и должно быть, откуда компилятору знать как называется шрифт, а так вы при внедрении задаете идентификатор к нему и обращаетесь.
Миниатюры
Нажмите на изображение для увеличения
Название: test.JPG
Просмотров: 47
Размер:	61.3 Кб
ID:	29872  
__________________
return this...

Старый 02.08.2013, 13:59
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 10  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Хм, странно. У меня вот такая версия (портабельная):

Название: snap4931.jpg
Просмотров: 241

Размер: 162.1 Кб

И в ней, по опции:
Нажмите на изображение для увеличения
Название: snap4927.jpg
Просмотров: 102
Размер:	76.1 Кб
ID:	29873

Есть лишь такое меню:
Название: snap4928.jpg
Просмотров: 256

Размер: 46.5 Кб

И затем, когда шрифт добавлен, есть еще контекстное меню:
Название: snap4929.jpg
Просмотров: 236

Размер: 47.0 Кб

В коротом пункт Linkage:
Название: snap4930.jpg
Просмотров: 228

Размер: 64.2 Кб

И это всё что есть.

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

Теги
default , MouseEvent , setTextFormat , сброс
Опции темы
Опции просмотра

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

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


 


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


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