Progression 02 シーン遷移

単純なシーン遷移のサンプル


ソース

package 
{
	import jp.progression.*;
	import jp.progression.casts.*;
	import jp.progression.config.*;
	import jp.progression.debug.*;
	/**
	 * ...
	 * @author matsu4512
	 */
	public class Main extends CastDocument  
	{		
		public function Main() 
		{
			super( "index", IndexScene, new WebConfig() );
		}
		
		/**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */
		protected override function atReady():void 
		{
			// 開発者用に Progression の動作状況を出力します。
			Debugger.addTarget( manager );
			// 最初のシーンに移動します。
			manager.goto( manager.syncedSceneId );
		}		
	}
}

import caurina.transitions.properties.*;
import flash.display.*;
import flash.text.*;
import jp.progression.casts.*;
import jp.progression.casts.buttons.*;
import jp.progression.commands.*;
import jp.progression.commands.display.*;
import jp.progression.commands.lists.*;
import jp.progression.commands.net.*;
import jp.progression.commands.tweens.*;
import jp.progression.data.*;
import jp.progression.events.*;
import jp.progression.scenes.*;
class IndexScene extends SceneObject {
	private var page1:Scene, page2:Scene, page3:Scene;
	private var btn1:NewCastButton, btn2:NewCastButton, btn3:NewCastButton;
	
	public function IndexScene() {
         // シーンを作成
        page1 = new Scene("page1", 0xFF);
		page2 = new Scene("page2", 0xFF00);
		page3 = new Scene("page3", 0xFF0000);
		//シーンを追加
		addScene(page1);
		addScene(page2);
		addScene(page3);
		//ボタンの生成
		btn1 = new NewCastButton("/index/page1", "page1", { x:50, y:50 } );
		btn2 = new NewCastButton("/index/page2", "page2", { x:50, y:150 } );
		btn3 = new NewCastButton("/index/page3", "page3", { x:50, y:250 } );
	}
	
	//このシーンに移動してきたときに実行
	override protected function atSceneInit():void 
	{
		//ボタンを表示
		addCommand(
			new AddChild(container, btn1),
			new AddChild(container, btn2),
			new AddChild(container, btn3)
		);
	}
		
	//別のシーンへの移動時に実行
	override protected function atSceneGoto():void 
	{
		//ボタンを削除
		addCommand(
			new RemoveChild(container, btn1),
			new RemoveChild(container, btn2),
			new RemoveChild(container, btn3)
		);
	}
}

class Scene extends SceneObject {
	private var sp:Sprite;
	private var btn:NewCastButton;
	public function Scene(name:String, color:uint) {
		super(name);
		sp = new Sprite();
		sp.graphics.beginFill(color);
		sp.graphics.drawRect(0, 0, 500, 500);
		sp.graphics.endFill();
		
		var txt:TextField = new TextField();
		txt.defaultTextFormat = new TextFormat(null, 100);
		txt.autoSize = TextFieldAutoSize.LEFT;
		txt.text = name;
		txt.x = 250 - txt.width / 2;
		txt.y = 250 - txt.height / 2;
		sp.addChild(txt);
		
		btn = new NewCastButton("/index/", "Index", { x:50, y:50 } );
	}
			
	//このシーンに移動してきたときに実行
	override protected function atSceneInit():void 
	{
		addCommand(
			new AddChild(container, sp),
			new AddChild(container, btn)
		);
	}
		
	//別のシーンへの移動時に実行
	override protected function atSceneGoto():void 
	{
		addCommand(
			new RemoveChild(container, btn),
			new RemoveChild(container, sp)
		);
	}
}

class NewCastButton extends CastButton 
{
	public function NewCastButton(link:String, label:String, initObject:Object = null) 
	{
		super( initObject );
		
		var txt:TextField = new TextField();
		txt.text = label;
		addChild(txt);
		
		// 移動先となるシーン識別子を設定します。
		sceneId = new SceneId( link );			
	}
}