当我使用getCharBoundaries()
并且我不确定导致它的原因时,我一直在看这个问题。我有的一些文字对它完全没问题,有时它会引起人们的注意。
这是我的代码
while (copy.text.indexOf("{") != -1) //copy is a proprietary textnode type object
{
var char:String = "tf"
var searchString:String = "{" + char + "}";
var index:int = copy.text.indexOf(searchString);
var bounds:Object = copy.content.getCharBoundaries(index); //content is a flash textField
//sprite is created elsewhere, it is not the issue
sprite.x = copy.x + bounds.x + 4; //here we sometimes get the error that bounds is null
sprite.y = copy.y + bounds.y - 2;
//replace the string we used with characters that are easy to hide with the sprite and take up a decent width
copy.text = copy.text.replace(searchString, "---" );
}
断开的那个有我们想要移除的2个子串(称为" {tf}"。第二个总是断开,即使我完全从字符串中删除第一个。字符串不是我可以公开发布的东西,因为它是工作的一部分,但足以说有两段用1行分隔(也就是说,两个"返回"被输入到它中)。但是,如果我删除所有的返回,第二个STILL会中断。
正如我的研究告诉我的那样,只是getCharBoundaries()
不喜欢某些角色 - 大部分时间都是标点符号 - 但是99%的时间我通过在一个字符串中,它工作正常。我希望有人可以解释为什么getCharBoundaries()
返回null(文档没有解释这个)以及我可以做些什么来修复它。
我已经尝试在更换字符串之前获取所有索引,但我遇到了同样的问题
答案 0 :(得分:1)
这是我们设法解决的问题。在尝试在每一行上得到一个符号后,我们发现它每次都在第3行之后断开。
这有助于我们弄清楚我们的文字域太小。 getCharBoundaries()
试图找到超出它的宽度和高度的空间中的相对点,并且它不喜欢它。正如它所做的那样,文本正在溢出文本区域,因此文本字段的高度对我们来说从来都不是问题。据我们所知,文本域的边界与文本出现的一样大,但事实并非如此。
答案 1 :(得分:0)
如果动态创建文本字段,您可以做的一件事是添加一个enterframe侦听器,实际上跳到下一帧,其中将使用新的height和width参数更新文本字段。
addEventListener(Event.ENTER_FRAME, validate);
private function validate(e:Event):void
{
removeEventListener(Event.ENTER_FRAME, validate);
txt.getCharBounds(yourIndexHere);
}