我的客户在几年前开发的AS2应用程序遇到了很大的问题。
据我所知,这是由最近版本的Flash Player中的一个公认错误造成的(请参阅http://forums.adobe.com/message/3859034和https://bugbase.adobe.com/index.cfm?event=bug&id=2941694)。
两个版本的FP受到影响(10.3.183.5和10.3.183.7),并且该错误已在10.3.183.10中修复。
显然,升级Flash Player将解决问题,但我们都知道用户并不总是这样做,而且她一直在收到有关此问题的电子邮件。
我正在考虑更新SWFObject代码以明确检测10.3.183.10并让ExpressInstall“鼓励”用户升级,但我不知道这是否会飞。
我已经尝试了一些搜索已经发现的解决方法,但在我的情况下都没有。
我想知道是否有人找到了解决此问题的可靠方法?
答案 0 :(得分:2)
我要尝试的第一件事就是使用textField.htmlText而不是textField.text,看看是否有解决方法(尽管如果我这样做会感到惊讶)。
第二种可能的方法我可以看到修复它(这真的不太漂亮)是手动自动换行。以下是在AS3中,因为这是我使用的。我会留给你把它转换成AS2,但我认为这也应该可以在AS2中使用。
var text : String = "some text here";
var textField : TextField = new TextField();
textField.wordwrap = false;
textField.multiline = false;
textField.autosize = false;
textField.width = MAX_TEXT_WIDTH;
//other formatting stuff
var words : Array = text.split(" ");
var line : String = words[0];
textField.text = words[0];
var lines : Array = new Array();//will contain all lines
for(var i : int = 1; i < words.length; ++i)//start at second word
{
textField.text += " " + words[i];//try adding another word to the line
if(textField.textWidth > MAX_TEXT_WIDTH)//overflowed line
{
lines.push(line);
line = words[i];
textField.text = line;
}
else//doesn't overflow, line is still valid
{
lines += textField.text;
}
}
lines.push(line);
var text : String = lines[0];
for(i = 1; i < lines.length; ++i)
{
text += "\n" + lines[i];
}
textField.multiline = true;
textField.height = lines.length * HEIGHT_PER_LINE;//HEIGHT_PER_LINE can be found using getLineMetrics and
//adding gutter pixels to the height - might have to
//play a little with this
textField.text = text;
不确定这个编译(它很可能不是AS2兼容)但这应该给出一般的想法。做自己的文字,看看是否有效。在检查textWidth时,还要确保格式化应用于文本。我想你每次更改textField.text值时都需要调用setTextFormat(myTextFormat)。
我还看到,显然多行可能在该版本中不起作用。如果是这种情况,您可能必须为每一行创建一个新的TextField对象并偏移它们的y值,使它看起来像是相同的TextField(如果是这样的话,希望你没有在textFields上使用边框或背景) )
答案 1 :(得分:1)
既然问题已经解决,那么任何人都不太可能会想出一个解决方法。可能你建议的SWFObject方法是要走的路。只需检查版本是否在10.3.183.5和10.3.183.7之内,如果是,则显示ExpressInstall。
答案 2 :(得分:1)
我认为最合适的AS版本是
the_textfield.autoSize = false;
the_textfield.multiline = false;
the_textfield.wordWrap = false;
var words : Array = the_textfield.text.split(" ");
var line : String = words[0];
the_textfield.text = words[0];
var lines : Array = new Array();
for (var i : Number = 1; i < words.length; ++i) {
the_textfield.text += " " + words[i];
if (the_textfield.textWidth > SOME_WIDTH) {
lines.push(line);
line = words[i];
the_textfield.text = line;
} else {
line += " " + words[i];
}
}
lines.push(line);
var t : String = lines[0];
for (i = 1; i < lines.length; ++i) {
t += "\n" + lines[i];
}
the_textfield.text = t;
the_textfield.autoSize = true;
the_textfield.multiline = true;
the_textfield.wordWrap = false;
在我的情况下,我不得不使用SOME_WIDTH
,但是文本字段是创作的,并且有一些奇怪的缩放事情正在发生,所以我只是根据经验计算出数字。