Просмотр полной версии : экземпляр dynamic text на сцене чтобы работал текст?
Denis Davidov
24.05.2008, 02:32
Всем доброго времени суток.
Сегодня убил несколько часов, чтобы раскопать следующее:
iNils где-то выкладывал пример-флешку TextField с antiAliasType = "advanced".
решил сделать свой класс для отображения текста, кот. читается из xml,
текст не отображался ни в какую!..
в конце концов все закомментил и скопировал код из примера iNils в свою флешку- снова ничего!
Опытным путем пришел к тому, что динамический текст не показывается елси на сцене нет динамического поля, пусть даже пустого, без линкажда и т.д. Это у меня так хитро глючит CS3 или это общий глюк или так и должно быть??
Это часть кода, кот. выкладывал iNils. если со сцены убрать динамическое поле, то текста нет...
var my_format:TextFormat = new TextFormat();
my_format.font = "Times New Roman";
my_format.size = 20;
var my_text1:TextField = this.createTextField("my_text1", this.getNextHighestDepth(), 10, 10, 300, 30);
my_text1.text = "This text uses advanced anti-aliasing.";
my_text1.antiAliasType = "advanced";
my_text1.border = true;
my_text1.embedFonts = true;
my_text1.setTextFormat(my_format);
Что меня удивляет еще больше, это то, что я уже написал класс текстовую кнопку и там все работает без проблем без этих гемороев...
Помогите разобраться плиз...
вот эта строка
...
my_text1.embedFonts = true;
...
говорит о том, что шрифт должен быть внедрен в swf, иначе текст отображатся не будет.
Наличие текстового поля обеспечивает внедренние шрифта (не само наличие конечно, а определнные настройки поля).
Denis Davidov
24.05.2008, 02:52
Спасибо за ответ.
Насчет строчки это понятно! Я просто не знал что нужно еще текстовое поле на сцену помещать. Какие настройки текстового поля должны быть?
В нем просто нужно в embeded выбрать те шрифты кот. используешь?
Выглядит это все как танцы с бубнами :)
В нем просто нужно в embeded выбрать те шрифты кот. используешь?да
Выглядит это все как танцы с бубнами :)Да нет. Это "официальный" способ внедрения через библиотеку, на самом деле танец с бубном. Так как танцуй - не танцуй, а средств контроля внедреных символов у данного способа нет.
А вот через текстовые поля - есть. Поэтому "шрифты в либе - зло"
Denis Davidov
24.05.2008, 03:09
Ок. Спасибо! Теперь буду знать.... :)
EDITED:
а есть ли какиенибудь пляски с бубнами при HTML текстах?
Пример их хелпа снаружи в АС работает, а внтури класа не хочет, оч. странно...
текст:
"<font face='Times New Roman' size='25'>This is how you assign HTML text to a text field.</font><br>It's very useful.</br>"
Код внутри класса (думал что связано с TextFormat (убрал) или еще с чем, непонятно... Появляются обрывки слов...
...
this.__txt.html = true;
this.__txt.wordWrap = true;
this.__txt.multiline = true;
this.__txt.htmlText=txt;
this.__txt.antiAliasType = "advanced";
this.__txt.border = false;
this.__txt.embedFonts = true;
this.__txt.selectable = false;
...
Denis Davidov
24.05.2008, 13:07
Причем, сейчас проерил, поле text и htmlText содежрат вполен разумные значения:
This is how you assign HTML text to a text field.
It's very useful.
и
<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="25" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is how you assign HTML text to a text field.<FONT SIZE="12"></FONT></FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">It's very useful.</FONT></P>
а отображается:
This is h u assign T text t a text ield (cм. jpg)
Что за глюк???
Ну раз их класса не работает, то почему сам класс не показываете?
Denis Davidov
24.05.2008, 14:40
Просто думал что это общие грабли а не мой косяк в классе...
Не хотел лишний раз напрягать людей чтением классов...
Вот класс:
import com.mosesSupposes.fuse.*;
class com.davydden.TxtField extends MovieClip {
private var _y, _height, _x, _width;
private var __perc:Object;//w,h,x,y coordinantes in percents of Stage, needs to reScale __perc["_x","_y","_width","_height"]=...
private var __txt:TextField;//dynamic multiline text
private var __Func:Function,__scope:Object,__params:Array;//Callback
private var __FuncH:Function,__scopeH:Object,__paramsH:Array;//Hide callback
var __textColor;// color of the text in Hex
var __backColor;//color of the background in Hex
private var __backAlpha:Number;//alpha of the background
private var __textFormat:TextFormat;//format of the text
private var __scale:Array;//array of strings, containig properties to rescale "_x", "_y",....
private var __back_mc:MovieClip;//movie Clip with background
private var __s:Object;// object with .x,.y.widht.height
function TxtField() {
super();
trace("TxtField:TxtField...");
com.mosesSupposes.fuse.ZigoEngine.register(com.mosesSupposes.fuse.Fuse, com.mosesSupposes.fuse.PennerEasing);
}
function rgb2Hex(rgb) {
if (rgb.length>1) {
var r=rgb[0];
var g=rgb[1];
var b=rgb[2];
//var hex:String = "0x"+ r.toString(16)+g.toString(16)+b.toString(16);
//return hex;
return (r << 16 | g << 8 | b);
} else {
return rgb;
}
}
function drawBack(w:Number,h:Number) {
trace("TxtField:drawBack:...");
this.__back_mc=this.createEmptyMovieClip("back", 1);
this.__back_mc._x=0;
this.__back_mc._y=0;
//trace("this.__back_mc :x: "+this.__back_mc["_x"]+" "+this.__back_mc["x"]);
trace(this.__backColor);
with (this.__back_mc) {
beginFill(this.__backColor,100);
moveTo(0,0);
lineTo(w,0);
lineTo(w,h);
lineTo(0,h);
endFill();
}//end with
this.__back_mc._alpha=__backAlpha;
trace("back w/h/alpha: "+this.__back_mc._width+" "+this.__back_mc._height+" "+this.__back_mc._alpha);
}
function init(_txt:String,x:Number,y:Number,w:Number,h:Number,_textColor,_backColor,_backAlpha:Number,_textFormat:TextFormat,_scale:Array) {
trace("TxtField:init...");
this.__s.x="width";
this.__s.y="height";
this.__s.width="width";
this.__s.height="height";
this._x=x;
this._y=y;
this.__textColor=rgb2Hex(_textColor);//[255, 255, 255];
this.__backColor=rgb2Hex(_backColor);//[202, 4, 4];
trace("__textColor: "+this.__textColor+" __backColor: "+this.__backColor);
this.drawBack(w,h);
trace("this w/h: "+this._width+" "+this._height);
this.initScale(_scale);
this.__textFormat = _textFormat;
this.__textFormat.color = this.__textColor;
this.__txt = this.createTextField("txt2", this.getNextHighestDepth(), 0, 0, w,h);
trace("this w/h: "+this._width+" "+this._height);
this.setText(_txt);
this.__FuncH=undefined;
this.__scopeH=undefined;
this.__paramsH=undefined;
this.__Func=undefined;
this.__scope=undefined;
this.__params=undefined;
//Stage.addListener(this);
}
function onResize() {
this.scale();
}
function scale() {
for (var i=0; i<__scale.length;i++) {
var sc=__scale[i];
this[sc]=this.__perc[sc] * Stage[this.__s[sc]];
trace("TxtField:scale "+i+"="+this[sc]);
}
trace(this["_x"]);
}
function setText(txt:String) {
trace("TxtField:setText... "+txt);
this.__txt.html = true;
this.__txt.wordWrap = true;
this.__txt.multiline = true;
//this.__txt.autoSize = "left";
this.__txt.antiAliasType = "advanced";
this.__txt.border = false;
this.__txt.embedFonts = true;
this.__txt.selectable = false;
this.__txt.htmlText=txt;
//this.__txt.text=txt;
//this.__txt.setTextFormat(this.__textFormat);
trace("TF :"+this.__textFormat);
trace("__txt.text: "+this.__txt.text);
trace("this.__txt.htmlTex: "+this.__txt.htmlText);
}
function setCallback(_Func:Function,_scope:Object,_params:Array) {
this.__Func=_Func;
this.__scope=_scope;
this.__params=_params;
}
function setHideCallback(_Func:Function,_scope:Object,_params:Array) {
this.__FuncH=_Func;
this.__scopeH=_scope;
this.__paramsH=_params;
}
function initScale(_scale:Array) {
trace("TxtField:setScale..."+_scale);
this.__scale=_scale;
for (var i=0; i<__scale.length;i++) {
var sc=__scale[i];
trace(this.__s[sc]);
trace("Stage[i] "+Stage[this.__s[sc]]);
this.__perc[sc] = this[sc]/Stage[this.__s[sc]];
trace("TxtField:writeScale: "+sc+":"+this.__perc[sc]);
} //this.hold_mc._x = this.hold_mc._x-(_root._xmouse-Stage.width/2)/20;
trace("Stage[x]: "+Stage["width"]+" :: "+Stage.width);
}
}
Это черновик, т.е. там много чуши и много не работает, но для текста важна функция setText в init(...). Все остальные вещи закомментины...
Во флеше это так:
var descriptS:String;
descriptS="<font face='Times New Roman' size='25'>This is how you assign HTML text to a text field.</font><br>It's very useful.</br>";
var my_format:TextFormat = new TextFormat();
my_format.font = "Times New Roman";
my_format.size = 15;
this.descriptionTxt=this.createEmptyMovieClip("dTxt",this.getNextHighestDepth());
this.descriptionTxt._x=250;
this.descriptionTxt._y=250;
this.descriptionTxt.__proto__=TxtField.prototype;
var txtW=500;
this.descriptionTxt.init(descriptS,Stage.width/2-txtW/2,0,txtW,Stage.height,[255,0,0],[98,98,98],100,my_format,["x","y","width","height"]);
Спасибо!..
У меня текст отображается полностью.
Denis Davidov
25.05.2008, 13:36
да уж...
а у тебя какая версия флеш? CS3?
Denis Davidov
25.05.2008, 15:07
Понятно, спасибо...
Скачиваю UpDate для CS3 сейчас, надеюсь поможет... если нет - то видимо это глюк Флеш...
EDIT:
аааа, не заметил что в Dynamic Text Field (пустышке) на сцене были включены только 10 символов,
как только включил Cyrilic, Uppercase, Lowercase, Numerals, Punctutation -- все заработало...
Вот она -- невнимательность :) черт... :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.