Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   trace(); - эмуляция (http://www.flasher.ru/forum/showthread.php?t=91632)

lowka 05.02.2007 23:05

Я бы сделал так (доработано):
Код:

class Output {       
        private static var container:MovieClip;
        private static var textField:TextField;
       
        // минимальная ширина окна.
        private static var MIN_WIDTH:Number = 100;
        // минимальная высота окна.
        private static var MIN_HEIGHT:Number = 100;
       
        /**
        * Создание окна.
        * @param        target        контейнер в котором будет создано окно.
        * @param        depth  глубина.
        * @param        width  ширина окна.
        * @param        height  высота окна.
        */
        public static function create(target:MovieClip, depth:Number, width:Number, height:Number):Void {
                if(!MovieClip(target) || Output.container.getDepth()){//доработано.
                        return;
                }
                Output.container = target.createEmptyMovieClip("__output", !isNaN(depth)? depth: 0);
               
                width = !isNaN(width) && width > Output.MIN_WIDTH ? width: Output.MIN_WIDTH;
                height = !isNaN(height) && height > Output.MIN_HEIGHT ? height: Output.MIN_HEIGHT;
               
                Output.textField = Output.container.createTextField("__text", 0, 0, 0, width, height);
                Output.textField.background = true;
                Output.textField.border = true;
                Output.textField.selectable = false;
                Output.textField.multiline = true; //добавлено.
               
                Output.hide();
        }
       
        /**
        * Вывод сообщения.
        * @param        message сообщение.
        */
        public static function showMessage(message:String):Void {
                if(!Output.container){
                        return;
                }
                Output.toCenter();
               
                Output.container._visible = true;
                Output.textField.text = message;
        }
       
        /**
        * Скрытие окна.
        */
        public static function hide():Void {
                if(!Output.container){
                        return;
                }
                Output.container._visible = false;
        }
       
        /**
        * Перемещение окна в центр экрана.
        */
        private static function toCenter():Void {
                var point:Object = {x: (Stage.width - Output.container._width)/2,
                                                        y: (Stage.height - Output.container._height)/2};
               
                Output.container.globalToLocal(point);
                Output.container._x = point.x;
                Output.container._y = point.y;
       
        }
}

Создаем окно:
Код:

import Output;

var outputDepth:Number = 1000;
var outputWidth:Number = 300;
var outputHeight:Number = 200;

Output.create(this, outputDepth, outputWidth, outputHeight);

Вызываем:
Код:

Output.showMessage("Hello!");

etc 05.02.2007 23:47

Наш подход :)

Только может возникнуть проблема такого рода, что при повторном тесте ролика (второй раз Ctrl+Enter) твой вывод работать не будет. А все потому что есть баг, при котором в этом случае статические переменные не обнуляются, а мувика Output.container не существует, но при этом проверка if (Output.container) проходит. В этом случае нужно проверить наличеие у container какого-нибудь метода от MovieClip, например getDepth. Если такового нет, то создавать мувик заново.

lowka 05.02.2007 23:59

Спасибо. Буду знать.

etc 06.02.2007 00:13

http://dev.etcs.ru/blog/as2/ru/etcs/effects/texttween/ например, здесь это реализовано.


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

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