Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   зигзаг забивка текста (http://www.flasher.ru/forum/showthread.php?t=169973)

in4core 15.10.2011 21:36

зигзаг забивка текста
 
Есть 2 варианта стечения обстоятельств - либо 3 текстовых поля либо 43... как говорится. Важно другое алгоритм . Что нужно получить :
Код:

0  0    33                1
  1            7
      15        18  20

Тоесть изначально все пусто. Приходят данные например 1:3 значит нужно отобразить 1 в 3 поле, затем 2:2 нужно отобразить 2ку во втором поле на клетку дальше чем предидущее и т.д. Когда все поля заполнены до предела первые значения полей удаляются , при приходе новых значений заполняются последние и т.д.

Что вы посоветуете , как лучше сделать в 3 поля или в 43 ? и какой алгоритм предпринять?

Cornford 15.10.2011 22:22

чето нече не ясно

in4core 15.10.2011 23:21

что именно не ясно? Ну я привел пример как выглядет текст в 3х идущих друг за другом полях. Тоесть каждое новое значение записывается в одно из 3х полей, причем на 1 символ больше чем в предидущем.
Если смотреть в коде то
Код AS3:

tf1.text = '1'
tf2.text = ' 55';
tf3.text = '  100';
.................... цикл прошел
tf1.text = '1  ';
tf2.text = ' 55  33';
tf2.text = ' 55  33 1';
tf3.text = '  100    11';


carrotoff 15.10.2011 23:39

Если бы тут не было таких больших чисел, то я подумал бы, что это табулатура для балалайки.:)

А по сути: я бы сделал бы либо 3 массива, либо 1 двумерный массив. Новое значение записывал бы в один из массивов, а в остальные   Ну и когда нужно было бы выводить, просто пробежался бы по массивам и вывел содержимое каждого из них в три текстовых поля.

В общем, я за 3 текстовых поля. Но всё равно странная задача.

Bgg 15.10.2011 23:43

Я бы вообще обошелся без текстовых полей, а рисовал в битмапе все символы.

in4core 16.10.2011 00:05

в битмапе? ммм ? как это?

carrotoff

Тут еще дело омрачается тем, что цифры могут быть от 0 до 99, и поэтому непонятно когда поле закончилось и нужно стирать посл символ

crazyone 16.10.2011 00:52

Если я правильно понял задачу, я бы заюзал TextFormat.tabStops и разделял цифры табуляцией.

in4core 16.10.2011 02:29

crazyone расскажите поподробнее!? ниразу не испольщовал этого свойства. как оно работает, точнее как его применить к моему вопросу?

crazyone 16.10.2011 13:09

Кушайте на здоровье:
Код AS3:

package com.ds.test{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat;
 
        /**
        * ...
        * @author DoctorSTaL
        */

        public class Main extends Sprite {
 
 
                public function Main():void {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        // Переменные
                        var tf1:TextField;
                        var tf2:TextField;
                        var tf3:TextField;
                        var tfArr:Array;
                        var tfrmt:TextFormat;
                        var colWidth:Array = [40, 50];
                        var lastTabstop:Number = 0;
                        var tabStops:Array = [];
                        var i:int;
 
                        // Создаем поля
                        tf1 = new TextField();
                        tf2 = new TextField();
                        tf3 = new TextField();
                        tf1.autoSize = tf2.autoSize = tf3.autoSize = TextFieldAutoSize.LEFT;
                        tfArr = [tf1, tf2, tf3];
 
                        this.addChild(tf1).y = 40;
                        this.addChild(tf2).y = 60;
                        this.addChild(tf3).y = 80;
 
                        tfrmt = new TextFormat();
 
                        // Тут начинается магия
                        function addText(tfInd:Number, text:String):void {
                                // добавляем текст в нужное поле
                                tfArr[tfInd].appendText(text);
 
                                // увеличиваем размер отступа табуляции на нужную ширину
                                // Note: она считается от начала текстового поля,
                                // а не от предыдущего отступа
                                lastTabstop += colWidth[Math.min(colWidth.length, text.length) - 1];
                                // добавляем его в TextFormat
                                tabStops.push(lastTabstop);
                                tfrmt.tabStops = tabStops;
 
                                // всем полям добавляем табуляцию и применяем формат с актуальными отступами табуляции
                                for (var j:int = 0; j < tfArr.length; j++) {
                                        tfArr[j].appendText("\t");
                                        tfArr[j].setTextFormat( tfrmt );
                                }
                        }
 
 
                        // Finnaly, заполняем поля змейкой!
                        i=20
                        while (--i>0) {
                                addText(int(Math.random() * 3), int(Math.random() * 99));
                        }
                }
 
        }
 
}


Inet_PC 16.10.2011 13:24

Цитата:

Я бы вообще обошелся без текстовых полей, а рисовал в битмапе все символы.
Одно текстовое поле. Назначаем ему текст, затем bitmapData.draw(tf);
Вот собственно и все.


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

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