Показать сообщение отдельно
Старый 13.08.2008, 00:32
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
import mx.utils.Delegate;

/**
* Pulser class. Do not instantiate, use static Pulser.getInstance()
* instead. Provides AsBroadcaster style ability for any object to recieve
* playback updates.
* @author wvxvw
*/
class Pulser 
{
	/**
	 * String. "pulserPlay".
	 */
	public static var PULSER_PLAY:String = "pulserPlay";
	
	/**
	 * String. "pulserStop".
	 */
	public static var PULSER_STOP:String = "pulserStop";
	
	private static var _instance:Pulser;
	
	/**
	 * AsBroadcaster style decoration.
	 * Will be overriden by AsBroadcaster.initialize().
	 */
	public var addListener:Function;
	
	/**
	 * AsBroadcaster style decoration.
	 * Will be overriden by AsBroadcaster.initialize().
	 */
	public var removeListener:Function;
	
	/**
	 * AsBroadcaster style decoration.
	 * Will be overriden by AsBroadcaster.initialize().
	 */
	public var broadcastMessage:Function;
	
	private var _clip:MovieClip;
	
	private function Pulser() 
	{
		AsBroadcaster.initialize(this);
		_clip = _root.createEmptyMovieClip("Pulse_clip", 1234);
	}
	
	/**
	 * Starts the playback.
	 */
	public function play():Void
	{
		_clip.onEnterFrame = Delegate.create(this, enterfameDelegate);
	}
	
	/**
	 * Pauses the playback.
	 */
	public function stop():Void
	{
		delete _clip.onEnterFrame;
	}
	
	private function enterfameDelegate():Void
	{
		broadcastMessage(PULSER_PLAY);
	}

	/**
	 * Returns link to Pulse instance.
	 * @return Pulser.
	 */
	public static function getInstance():Pulser
	{
		if (!_instance)_instance = new Pulser();
		return _instance;
	}
}
Код:
import Pulser;

class Main
{
	public static var test0:Object;
	public static var test1:Object;
	
	public static function main():Void
	{
		test0 = { i:0 };
		test1 = { j:0 };
		test0.toString = function():String { return "test0 i=\"" + this.i + "\"" };
		test1.toString = function():String { return "test1 j=\"" + this.j + "\"" };
		test0[Pulser.PULSER_PLAY] = function():Void
		{
			this.i++;
			trace(this)
		}
		test1[Pulser.PULSER_PLAY] = function():Void
		{
			this.j++;
			trace(this)
		}
		Pulser.getInstance().addListener(test0);
		Pulser.getInstance().addListener(test1);
		Pulser.getInstance().play();
	}
}
Конечно, писать так, как в тесте не нужно, это именно тест, просто чтобы запись была короче.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 13.08.2008 в 00:35.