Форум 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)

KLieriK 05.02.2007 03:03

trace(); - эмуляция
 
Доброго времени суток...
а можно как-то эмулировать все что отобращаетсья в Output.
Как ошибки так и то что возв. ф-я trace(); в уже готовом проекте.
к примеру зделать так, что если выозв. какая-либо ошибка, то создаеться текстовое поле в центре и туда выводиться.

miramax 05.02.2007 03:56

Я делаю так:
http://as3.ru/?p=16
Можно в любой момент выключить , или вести лог куда нужно.
Можно попробовать это на AS2 сделать, не знаю как там обстоят дела с топлевел функциями.
З.Ы. trace(); - нельзя переопределить.

CorC 05.02.2007 10:39

alert не поможет?

KLieriK 05.02.2007 13:45

2CorC
alert - ето ж ф-я javascript.
или .. всмысле.. что ты имел ввиду?

CorC 05.02.2007 14:14

компонент Alert
все что нужно выводить запоминаешь хоть в строке хоть в массиве
пишешь небольшую процедурку и Alert.show(str)

KLieriK 05.02.2007 14:57

2CorC,
О! спасибо. попробуем :)

ЗЫ: дабы не создавать отдельный топ для столь маленького и неактуального вопроса, пишу тут: как зделать что б ф-я была видна во всех дочерних мс, а то щас приходиться писать типа: _parent._parent...func();

CorC 05.02.2007 14:59

_global. ?
_root. ?

lowka 05.02.2007 16:38

Можно так:
Код:

Class MyOutput {
  ...
  public static function showMessage(message:String):Void {
    ...
  }
}

Код:

import MyOutput;

MyOutput.showMessage("hello!");


etc 05.02.2007 16:51

Можно загнать в прототип, правда это не вариант. Проще использовать статическое свойство класса.

KLieriK 05.02.2007 21:08

2lowka
а мона небольшой живой пример, или линк хоть на доку, что б понять как пишеться синтаксис и правильно ето все писать

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:09.

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