J'ai commencé par reprendre entièrement mon code, c'est en fait ce qui a était le plus long, c'est là où l'on découvre que les apparences sont souvant trompeuses... en compilant avec MTASC c'est affolant le nombre d'erreurs que j'avais pu laisser passer ! :ouch: Heureusement en utilisant Eclipse et FlashOut c'est assez simple de retrouver toutes les erreurs qui passent comme une lettre à la poste dans Flash. Avec un peu de patience et de motivation j'ai réussi à couvrir l'intégralité de mon code (raz le bol de se taper la tête contre l'écran à chaque compilation dans Flash.. c'est une bonne motivation je trouve).

Maintenant que tout est opérationnel au niveau du code, c'est le choix des outils qui est le plus difficile. Je débute encore avec tout cela... donc pour le moment je garde Flash pas trop loin, comme Stéfane Funaro, pour avoir la possibilité de changer rapidement le contenu de ma bibliothèque, même si il est vrai que la possibilité de ne pas l'ouvrir du tout provoque un effet de liberté.... J'utilise encore SEPY car je le trouve plus sympa (pour le moment surement) que Eclipse pour coder (question d'habitude mais les habitudes cela peut se changer). Je reste fidèle à Sepy pour le moment, j'adore le petit bouton Check Syntax using MTASC qui est vraiment une bouffée d'air frais dans ma production de tous les jours, il est également moins lourd à lancer que Eclipse. Pour le moment le seul petit problème c'est le panneau de configuration et de prévisualisation de MTASC sui n'est pas encore très au point, à première vue il est impossible pour le moment de fermer la fenêtre de preview sans fermer complètement le panneau, perte de vitesse au niveau de l'ergonomie du panneau, il s'ouvre toujours n'importe comment etc.. mais je pense que c'est provisoire, Alessandro Crugnola (aka Sephiroth) a fait un vrai petit bijou et j'attends avec impatience la version 2 de SEPY pour voir si je passe à Eclipse ou non... Je vois bien un genre de FDT intégré dans SEPY... on verra bien :)

Pour finir, dernier petit point important, c'est le debugage de mes applications. J'ai pas le temps pour le moment de me confectionner ma propre console externe de Log donc j'ai décidé d'utiliser l'excellent API de LuminicBox : LuminicBox.Log, API de logging para Flash
A noter au passage que pour l'utiliser avec MTASC j'ai du changer un peu l'interface IPublisher en supprimant le premier import qui était inutile.

/*
 * Copyright (c) 2005 Pablo Costantini (www.luminicbox.com). All rights reserved.
 * 
 * Licensed under the MOZILLA PUBLIC LICENSE, Version 1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.mozilla.org/MPL/MPL-1.1.html
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
//import LuminicBox.Log.Level; // ici MTASC il apprécie pas l'import inutile
import LuminicBox.Log.LogEvent;
 
/**
* Basic publisher interface. All publishers must implement it.
*/
interface LuminicBox.Log.IPublisher {
 
	/**
	* Publishes the supplied LogEvent.<br />
	* The task this method must acomplish depends on the publisher.
	*/
	function publish(e:LogEvent):Void;
	/**
	* Returns the publisher's type or name.
	*/
	function toString():String;
}

Pour le reste je me suis inspiré rapidement de la classe SuperTrace de Stéphane Bebrone (aka Shaoken) pour remplacer dans MTASC mes trace() et avoir une sortie accessible facilement.

A noter que MTASC a changé depuis que Shaoken a sorti sa classe sur le wiki de mediabox et qu'actuellement la classe DefaultConfig du package LuminicBox pose problème... à l'intérieur la classe TracePublisher utilise une trace() et cela provoque donc une boucle infinie (ou presque) au niveau de la console à chaque fois qu'on cherche à faire une trace() dans son code.

Je tiens à remercier au passage Shaoken pour sa réactivé à ce sujet. J'ai pu grace à ses conseils avisés supprimer l'appel de la classe DefaultConfig et je me suis permi en attendant qu'il mette à jour sur le wiki de mediabox sa classe, de coder ma propre version utilisant dans les grandes lignes la logique de la sienne et les en ajoutant quelques petites modifications :

classe Level : Permet de gérer les énumérations statiques pour configurer le niveau d'un Log

/* ---------- Level
 
	Name : 	Level
	Package : eka.debug
	Version : 1.0.0.0
	Date :  2005-10-18
	Author : ekameleon
	URL : http://www.ekameleon.net
	Mail : contact@ekameleon.net
 
----------  */	
 
class eka.debug.Level {
 
	// ----o Author Properties
 
	public static var className:String = "Level" ;
	public static var classPackage:String = "eka.debug";
	public static var version:String = "1.0.0.0";
	public static var author:String = "ekameleon";
	public static var link:String = "http://www.ekameleon.net" ;
 
	// ----o Constructor
 
	private function Level() {
		//
	}
 
	// ----o ENUMS
 
	static public var DEBUG:String = "debug" ;
	static public var ERROR:String = "error" ;
	static public var FATAL:String = "fatal" ;
	static public var INFO:String = "info" ;
	static public var WARNING:String = "warn" ;
 
}

classe LuminicDebug : Permet de tracer via la console de LuminicBox

/* ---------- 	LuminicDebug
 
	Name : 	LuminicDebug
	Package : eka.debug
	Version : 1.0.0.0
	Date :  2005-10-18
	Author : ekameleon
	URL : http://www.ekameleon.net
	Mail : contact@ekameleon.net
 
	THKS : Stéphane Bebrone (aka Shaoken)
	http://wiki.media-box.net/classes/flash/be/shaoken/utils/supertrace
 
----------  */	
 
import eka.debug.Level ;
 
import LuminicBox.Log.ConsolePublisher ;
import LuminicBox.Log.Logger ;
import LuminicBox.Log.IPublisher ;
 
class eka.debug.LuminicDebug {
 
	// ----o Author Properties
 
	public static var className:String = "LuminicDebug" ;
	public static var classPackage:String = "eka.debug";
	public static var version:String = "1.0.0.0";
	public static var author:String = "ekameleon";
	public static var link:String = "http://www.ekameleon.net" ;
 
	// ----o Constructor
 
	private function LuminicDebug () {}
 
	// ----o Static Public Properties
 
	static public var viewInfo:Boolean = false ;
	static public var defaultDepth:Number = 1 ;
 
	// ----o Static Virtual Properties
 
	static public function get maxDepth():Number {
		return _console.maxDepth ;
	}
 
	static public function set maxDepth(n:Number):Void {
		_console.maxDepth = (n>0) ? n : defaultDepth ;
	}
 
	// ----o Static Public Methods
 
	static public function addPublisher(p:IPublisher):Void {
		_logger.addPublisher(p);
	}
 
	static public function initialize(id:String, depth:Number):Void 	{
		if (_logger && _console) _logger.removePublisher(_console) ;
		_logger = new Logger(id) ;
		_console = new ConsolePublisher();
		_console.maxDepth = depth || defaultDepth ;
		_logger.addPublisher(_console);
	}
 
	static public function trace (message , level:String):Void {
		switch(level) {
			case Level.ERROR :
			case Level.FATAL :
			case Level.INFO :
			case Level.WARNING :
				level = level ; 
				break ;
			default:
				level = "debug" ;
		}
		_logger[level].apply(_logger, [message]) ;
	}
 
	static public function traceReplacer( message, level:String ) {
		LuminicDebug.trace(message, level) ;
	}
 
	static public function toString():String {
		return "[LuminicDebug]" ;
	}
 
	// ----o Static Private Methods
 
	static private var _logger:Logger ;
	static private var _console:ConsolePublisher ;
 
}

Exemple d'utilisation :

import eka.debug.Level ;
import eka.debug.LuminicDebug ;
 
class test.debug.Test {
 
    // ----o Main
 
    static public function main() {
 
            LuminicDebug.initialize("__myTest__", 3) ;
            LuminicDebug.trace("First Test", Level.DEBUG) ;
 
            var test:Test = new Test() ;
 
    }
 
    // ----o Constructor
 
    function Test() {
 
        trace("Second Test", Level.WARNING) ;
		// LuminicDebug.maxDepth = 0 ; // réglage rapide de la profondeur pour parcourir un objet
   		var o = {} ;
   		o.toString = function () {
   			return "[o]" ;	
   		}
   		o.a = {} ;
   		o.a.toString = function () {
   			return "[a]" ;	
   		}
   		o.a.b = {} ;
   		o.a.b.toString = function () {
   			return "[b]" ;	
   		}
 
     	trace (o) ;
 
    }
}

Il est certain que mon but au final c'est de développer ma propre console de Log. Mais en attendant et par faute de temps c'est vraiment une très bonne solution :)

Bref... tout cela pour dire que je vais enfin pouvoir produire et ne plus subir 8)