Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не всегда срабатывает метод getCharBoundaries (http://www.flasher.ru/forum/showthread.php?t=188168)

lexa2000lexa 29.11.2012 17:34

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

var myTextField:TextField;
var myTextFormat:TextFormat = new TextFormat();
var arrayDecimal:Array = new Array();
myTextFormat.size = 20;
myTextFormat.leading = myTextFormat.size;
var str:String = "Для приготовления салата использовали 723333333333333333333/9 кг огурцов, помидоров на 2/9 кг меньше, чем огурцов, а перца на 878754554656565555555555555555527423423423/9 кг больше. Сколько килограммов огурцов и помидоров и перца использовали для приготовления салата?";
createProblemSituation()
function createProblemSituation()
{
        var _index:int = str.indexOf("/");
        if (_index!=-1)
        {
                var pattern:RegExp = new RegExp(/([0-9]+)\/([0-9]+)/g);
                str = str.replace(pattern,replaceStr);
        }
        myTextField = createText(str,0,0,550);
        this.addChild(myTextField);
        searcSymbol(arrayDecimal);
}
function replaceStr():String
{
        var n:uint = Math.max(arguments[1].length,arguments[2].length);
        var _obj:Object = {length:n,numerator:arguments[1],denominator:arguments[2]};
        arrayDecimal.push(_obj);
        var _str:String = "–";
        while (n!=1)
        {
                _str +=  "–";
                n--;
        }
        return _str;
}
function searcSymbol(array:Array):void
{
        var _index:int = 0;
        var _frame:Rectangle;
        //var _spotlight:Shape;
        var _numerator:TextField;
        var _denominator:TextField;
        trace(myTextField.text.length);
        for (var i:uint = 0; i<array.length; i++)
        {
                _index = myTextField.text.indexOf('–',_index);
                if (_index!=-1)
                {
                        _frame = myTextField.getCharBoundaries(_index);
                        trace(_frame,_index);
                        _numerator = createText(array[i].numerator,(_frame.x - _frame.width/5),(_frame.y - _frame.height/2));
                        _denominator = createText(array[i].denominator,(_frame.x - _frame.width/5),(_frame.y + _frame.height/2));
                        this.addChild(_numerator);
                        this.addChild(_denominator);
                        _index += array[i].length;
                }
        }
}
function createText(str:String,x:int=0,y:int=0,w:uint=0):TextField
{
        var _txt:TextField = new TextField();
        _txt.x = x;
        _txt.y = y;
        //_txt.border = true;
        _txt.selectable = false;
        _txt.autoSize = TextFieldAutoSize.LEFT;
        _txt.multiline = true;
        if(w!=0){
                _txt.wordWrap = true;
                _txt.width = w;
        }
        _txt.text = str;
        _txt.setTextFormat(myTextFormat);
        return _txt;
}



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

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