PDA

Просмотр полной версии : trace(); - эмуляция


KLieriK
05.02.2007, 03:03
Доброго времени суток...
а можно как-то эмулировать все что отобращаетсья в 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/ например, здесь это реализовано.