Просмотр полной версии : Embed шрифта в часто используемом классе
Sintesis
01.06.2012, 17:15
Вот если у меня есть клас в который я передаю строку и координаты расположения, а он создаёт текст и я часто использую этот класс в проекте, но в этом классе есть Embed шрифта, это значит - когда я создаю новый экземпляр то текст опять встраивается во флешку? Каким способом этого лучше избежать? Может какой нибудь паттерн, например одиночка может спасти или кто как делает?
А зачем каждый раз в классе генерить шрифт? Когда достаточно создать какой нить SharedFonts классю В него вписать ВСЕ ембеды, а в мейне написать SharedFonts; и все?
Sintesis
01.06.2012, 17:51
пробовал так, вот например класс с форматами, пусть там пока один:
package src.control{
import flash.text.TextFormat;
/**
* ...
* @author Sintesis
*/
public class SharedFonts {
[Embed(source = "Arial_Narrow.ttf", fontName = "Arial Narrow", embedAsCFF="false", fontStyle="smooth", mimeType = "application/x-font")]
private var ArialNarrow:Class;
public function SharedFonts() {
}
public function getFormat01():TextFormat {
var format01:TextFormat = new TextFormat();
format01.color = 0xffffff;
format01.size = 16;
format01.font = "Arial Narrow";
return format01;
}
}
}
но при его вызове вылетает ошибка Ambiguous reference to SharedFonts_ArialNarrow.
почему имя класса встроеного шрифта присоединяется к классу в который встраиваю?
[Embed(source="../someFont.ttf",
fontName = "myFont",
mimeType = "application/x-font",
fontWeight="normal",
fontStyle="normal",
unicodeRange="englishRange",
advancedAntiAliasing="true",
embedAsCFF="false")]
private var myEmbeddedFont:Class;
Добавлено через 1 минуту
Покажите что вы делаете. Пока я вижу только начинку класса. этого мало. И уберите формат пока что. Шаред только для встройки стоит делать , понятнее будет и вам
Sintesis
01.06.2012, 18:29
Так всё заработало, класс текста который использовал был унаследован от TextField, унаследовал от Sprite и всё пошло. Не знаю хороший ли выход? Просто нужен класс который можно использовать так
var form:SharedFonts = new SharedFonts();
var text:Text = new Text("мой текст...", form.format01());
text.textPosition(20, 200);
objMenu.addChild(text);
вот он работает:
package src.control{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class Text extends Sprite {
private var menuText:TextField;
public function Text(_text:String, _format:TextFormat) {
menuText = new TextField();
menuText.autoSize = TextFieldAutoSize.LEFT;
menuText.defaultTextFormat = _format;
menuText.embedFonts = true;
menuText.selectable = false;
menuText.text = _text;
addChild(menuText);
}
public function textPosition(_textX:Number, _textY:Number):void {
menuText.x = _textX;
menuText.y = _textY;
}
}
}
Но хотелось, что-б он был унаследован не от Спрайт, а от ТекстФтлд например(
Ну блин же, не так это делается а вот так
class SharedFonts ( начинка только эмбед, и ни от чего не расширяем. В main чтобы классс вкомпилися пишем просто SharedFonts; ВСЕ круто )
class DisplayText(...rest) форматы и прочее + создание текстовых поле, статичный класс.
private var _textField:TextField = DisplayText.addField('sharedFontName',14,'left');
addChild(_textField)
Sintesis
01.06.2012, 18:41
а DisplayText это что за класс? Расширенный TextField?
Нет. просто приватные поля. Не расширяется ни от чего
Добавлено через 1 минуту
package com.in4core.text
{
import flash.text.TextField;
import flash.text.TextFormat;
/**
* ...
* @author in4core
*/
public class DisplayText extends Object
{
private static var _textfield:TextField;
public static function addField ( font:String = null , size:uint = 12, bitmapFonts:Boolean = false,
autosize:String = 'left', isMulti:Boolean = false, text:String = '' ) : TextField
{
_textfield = null;
_textfield = new TextField();
_textfield.defaultTextFormat = setFormat(size, font);
_textfield.autoSize = autosize;
_textfield.text = text;
if (isMulti) _textfield.multiline = true;
_textfield.selectable = false;
if (!bitmapFonts) _textfield.antiAliasType = 'advanced';
if (font != null) _textfield.embedFonts = true;
else font = '_sans';
return _textfield;
}
private static function setFormat( size:uint, font:String ):TextFormat {
var tf:TextFormat = new TextFormat();
tf.size = size;
tf.font = font;
return tf;
}
}
}
Sintesis
01.06.2012, 18:57
А это, объект с текстфилдами, хорошо, нужно попробовать, спасибо!
Ну объект это так чисто для красоты. Любой класс он же от объекта наследуется по факту, поэтому я иногда пишу, а так можно было бы и без всего писать разницы никакой
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.