我想出了如何创造一种静态的方法,是随处可见,例如:

UtilLib.为:

package
{   
     public final class UtilLib
     {  
          public static function getTimeStamp():uint
          {
               var now:Date = new Date();
               return now.getTime();
          }
     }
}

我可以访问这个到处都通过这样做UtilLib.getTimeStamp()-现在,我想创建一个新的staic的方法称为日志(msg:String).这应该登录信息的多线上传提示,.

问题不过是,这个上传提示,必须建立某个地方,必须无障碍和可见的所有时间,我不想通过它通过功能的所有参数的时间,因为这会导致一个很大的麻烦(我会有通过它通过对象以及..).

因此,我如何做一个"公共文本框"因此,我的静态记录的方法可以写信呢?

更新: 我现在尝试过的以下类中,有一个静态的构造(我认为)。然而,文本框目的不是显示。当我做一个addChild(debugField)创建后,它给了我错误1180.

记录。作为

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldType;

    public class Logger extends Sprite
    {
        public static var debugField:TextField;

        /* static block */
        {
            trace("Logger initializing.");
            debugField = new TextField();
            debugField.width = 500;
            debugField.height = 100;
            debugField.x = 100;
            debugField.y = 400;
            debugField.background = true;
            debugField.backgroundColor = 0xFFFFFF;
            debugField.defaultTextFormat = new CustomTextFormat();
            debugField.mouseWheelEnabled = true;
            debugField.multiline = true;
            debugField.type = TextFieldType.DYNAMIC;
        }

        public static function log(msg:String):void
        {
            if (debugField) debugField.appendText(msg);
        }

    }
}

我初始化这样的:

var test:Logger = new Logger();
addChild(test);

我日志一个新的消息是这样的:

Logger.log("test");

不幸的是,该文本区域为没有显示。

有帮助吗?

解决方案

基本上,你需要:

  • 某个地方登录消息全球访问
  • 能够更新文本领域当的登录信息的变化

一个简单的解决方案,使用对象可能是这样的:

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.events.Event;

    public class Example extends Sprite {
        private var messageLog:TextField;

        public function Example() {
            createTextField();
            MessageLogger.getInstance().addEventListener( MessageLogger.LOG, handleMessageLoggerUpdate );
            MessageLogger.getInstance().log( "Message!" );
        }

        private function handleMessageLoggerUpdate( event:Event ):void {
            messageLog.text = MessageLogger.getInstance().getLog();
        }

        private function createTextField():void {
            messageLog = new TextField();
            addChild( messageLog );
        }
    }
}

MessageLogger

package {
    import flash.events.EventDispatcher;
    import flash.events.Event;

    public class MessageLogger extends EventDispatcher {
        private static var instance:MessageLogger;
        public static function getInstance():MessageLogger {
            if ( !instance ) {
                instance = new MessageLogger( new InstanceKey() );
            }
            return instance;
        }

        public static var LOG:String = "MessageLoader#log";

        private var messageLog:String;

        public function MessageLogger(key:InstanceKey) {
            messageLog = "";
        }

        public function log( message:String ):void {
            messageLog += message;
            notify();
        }

        public function getLog():String {
            return messageLog;
        }

        private function notify():void {
            dispatchEvent( new Event( LOG ) );
        }
    }
}
class InstanceKey {}

这里重要的是,这一信息可从任何地方使用记录

MessageLogger.getInstance().log( "Your Message Here" );

和什么都可以通知的一个消息时已经记录的使用

MessageLogger.getInstance().addEventListener( MessageLogger.LOG, listenerFunction );

在任何一点目前的信息登录,可以获得并使用

MessageLogger.getInstance().getLog();

其他提示

创建一个新的记录类,并且具有类具有静态构造。你的日志的方法添加到这个类。让静态构造函数的伐木场保存到一个私有变量。现在给你打电话的记录方法只需要调用你的静态构造函数与输入场之前,你想使用。这将创建类,建立了输入字段作为目的地,而现在你可以简单地刚刚从任何地方调用日志功能。

传统上,你让静态方法与私有变量之间的交互方式是通过他们,一个指针传递给你的文本。

所以,而不是

public static function getTimeStamp():uint { ... }

在有

public static function writeTimeStamp(messageBox):uint { ... }

因为我不是一个AS开发的语法可能是不正确的,但是,你明白我的意思?从那里,代码块可以就好像它是一个局部变量访问messageBox。那么它是

(我改名的方法名称为清楚起见,你甚至可以阻止它返回一个变量,如果它并不需要,但你需要进一步改变声明。)

在您更新后的调试文本字段需要被添加到显示列表中的某个地方。现在它看起来就像是刚刚创建和记录方法中使用它。 (:的DisplayObject displayObject的):您可以通过调用addChild添加显示对象到显示列表布尔;上的DisplayObjectContainer已经是级的儿童。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top