2009-12-09(Wed) 15:02
【AS3.0】外部XMLからナビゲーションメニューを作成

外部XMLから文字列を取得してナビゲーションメニューのようなものを作成する方法です。
見た目的にはXMLで画像ボタンを読み込んだ方が良いと思いますが、今回はテキスト情報のみを指定したいと思います。

  1. まずは読み込むXMLファイルを作成します。
    今回はテキストの羅列なので単純な構造です。

    
    
    	会社概要
    	業務実績
    	採用情報
    	商品案内
    
    

    flaファイルと同じ階層に「xml」という名前のフォルダを作成し、その中に保存します。

  2. 次にFlashで基本のボタンとなるムービークリップを作成します。
    テキストも仮に入れます。テキストの種類は「ダイナミックテキスト」インスタンス名に「btn_label」を指定してください。
    完成したらリンケージプロパティで「btn_mc」というクラス名をつけます。
    ナビゲーションボタンプロパティ設定
  3. ASファイルの記述です。
    外部XMLファイルの読み込みは、「外部XMLファイルから情報を取得 」の記事を参考にしても良いですが、今回は「WpXMLloader」というライブラリを使用してみます。
    ダウンロード&使用方法は下記アドレスを参考にしてください。
    WpXMLloader
  4. インポートするクラスです。
    ダウンロードしたWpXMLloaderを忘れずに読み込みます。

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import whirlpower.wploader.WpXMLloader;
    
  5. 外部XMLの読み込みの部分です。
    基本的にWpXMLloadeの使い方をそのまま使ってます。
    XMLのファイルパスだけ指定して、最後に配列で使いたいのでXMLListに代入します。

    function Main() {
    	WpXMLloader.addUrl( "navi_list", "xml/navi_list.xml" );
    	WpXMLloader.load( complete );
    }
    private function complete():void
    {
    	var naviXML:XML = WpXMLloader.getXmlByName( "navi_list" );
    	var naviXMLList:XMLList = naviXML.navi;
    }
    
  6. ボタンの生成から配置までfor文で行います。

    for (var i:uint = 0; i < naviXMLList.length(); i++) {
    	var btnMC:btn_mc = new btn_mc();
    	//XMLリストをボタンラベルに入れる
    	btnMC.btn_label.text = naviXMLList[i];
    	//ボタンの大きさ分ずらして配置
    	btnMC.y = i * (btnMC.height - 1);
    	//指マークON
    	btnMC.buttonMode = true;
    	//文字(子要素)は無視
    	btnMC.mouseChildren = false;
    	//ステージに配置
    	this.addChild(btnMC);
    	//マウスクリックイベント
    	btnMC.addEventListener(MouseEvent.CLICK, onClick);
    }
    

    デザインによって、btnMC.yの部分の間隔などを空けたりしてみてください。
    今回は四角に1pxのラインがあるボタンだったのでheightにマイナス1してます。

  7. 最後にクリックされた後の処理をonClickメソッドに記述していきます。
    今回はボタンのラベルを表示するだけの簡単なものにしてみました。

    function onClick(e:Event):void {
    	trace(e.target.btn_label.text + "をクリックしました。");
    }
    
  8. 最終的にはこんな感じ。

    package
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	import whirlpower.wploader.WpXMLloader;
    
    	public class Main extends Sprite
    	{
    		function Main() {
    			WpXMLloader.addUrl( "navi_list", "xml/navi_list.xml" );
    			WpXMLloader.load( complete );
    		}
    		private function complete():void
    		{
    			var naviXML:XML = WpXMLloader.getXmlByName( "navi_list" );
    			var naviXMLList:XMLList = naviXML.navi;
    
    			for (var i:uint = 0; i < naviXMLList.length(); i++) {
    				var btnMC:btn_mc = new btn_mc();
    				//XMLリストをボタンラベルに入れる
    				btnMC.btn_label.text = naviXMLList[i];
    				//ボタンの大きさ分ずらして配置
    				btnMC.y = i * (btnMC.height - 1);
    				//指マークON
    				btnMC.buttonMode = true;
    				//文字(子要素)は無視
    				btnMC.mouseChildren = false;
    				//ステージに配置
    				this.addChild(btnMC);
    
    				//マウスクリックイベント
    				btnMC.addEventListener(MouseEvent.CLICK, onClick);
    			}
    		}
    
    		//マウスクリック時の処理
    		function onClick(e:Event):void {
    			trace(e.target.btn_label.text + "をクリックしました。");
    		}
    	}
    }
    

category : ActionScript
tag :

Comments(0)Trackbacks(0)

2009-11-17(Tue) 16:35
Flashで書き出したFLVがFireFoxだけ再生できない件

Flashでビデオを読み込んで書き出したFLVがIEでは再生できるのにFireFoxではどうしても再生できませんでした。
ローカルでずっとテストしていたのですが、これがいけなかったようです。
結論から言うとアドレスに日本語全角が入っているとFireFoxでは再生できません。
なので全角のないフォルダに移動するか、サーバーにアップすれば大丈夫なようです。
ちなみにSkinのパスは読み込むhtmlのフォルダと同じ階層にする必要があります。swfを他のフォルダに入れている場合は注意してください。

category : ActionScript

Comments(0)Trackbacks(1)

2009-10-21(Wed) 16:27
【AS3.0】ウィンドウリサイズ時のステージサイズを取得

フル画面でフラッシュを表示さる場合画面のサイズによってコンテンツのサイズや位置などを変更する必要があります。
そこで今回はウィンドウリサイズ時のステージサイズを取得してみます。

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

	public class Main extends Sprite
	{
		function Main() {
			this.stage.addEventListener(Event.RESIZE, onResize);
		}
		//リサイズ時に呼び出されるイベント
		function onResize(event:Event):void {
			trace("W:" + this.stage.stageWidth + " H:"  + this.stage.stageHeight );
		}
	}
}

といってもこれだけです。
数値の取得だけなら簡単ですね。
onResizeに変更後の処理を記述していくことになります。

category : ActionScript
tag :

Comments(0)Trackbacks(0)

2009-08-18(Tue) 13:21
【AS3.0】SimpleButtonでボタンロールオーバーを設定

SimpleButtonクラスを使用することで簡単に「ロールオーバー」や「ロールダウン」のビジュアルを簡単に設定することができます。

  1. まずはSimpleButtonクラスをインポートします。
    import flash.display.SimpleButton;
  2. 次に「upState(通常時)」「overState(ロールオーバー)」「downStat(クリック)」それぞれのプロパティにDisplayObjectを設定します。
    今回はLoaderで読み込んだ外部画像でロールオーバーの設定をします。

    var btn:SimpleButton = new SimpleButton();
    //通常の状態
    btn.upState = mekaButton(_imgLoader);
    //ロールオーバー
    btn.overState = mekaButton(_imgLoader_o);
    //クリック時
    btn.hitTestState = btn.upState;
    
  3. mekaButtoではLoaderをaddChildしているだけですが、DisplayObjectを返す必要があります。

    private function mekaButton(load:Loader):Sprite {
    	var mySprite:Sprite = new Sprite();
    	mySprite.addChild(load);
    	return mySprite;
    }
    
  4. 最終的なコードです。

    package
    {
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.display.Loader;   
    
    	public class Main extends Sprite
    	{
    		var _imgLoader:Loader = new Loader();
    		var _imgLoader_o:Loader = new Loader();
    
    		public function Main() {
    			_imgLoader.load(new URLRequest("img/btn01.jpg"));
    			_imgLoader_o.load(new URLRequest("img/btn01_o.jpg"));
    
    			var btn:SimpleButton = new SimpleButton();
    			//通常の状態
    			btn.upState = mekaButton(_imgLoader);
    			//ロールオーバー
    			btn.overState = mekaButton(_imgLoader_o);
    			//クリック時
    			btn.hitTestState = btn.upState;
    
    			addChild(btn);
    		}
    
    		private function mekaButton(load:Loader):Sprite {
    			var mySprite:Sprite = new Sprite();
    			mySprite.addChild(load);
    			return mySprite;
    		}
    	}
    }
    

とりあえずボタンの変化しかしませんが、動作の設定は通常通りイベントリスナーで設定します。

category : ActionScript
tag :

Comments(0)Trackbacks(0)

2009-07-17(Fri) 09:13
【AS3.0】外部XMLファイルから情報を取得

複数の画像を扱えるようになったと思うので、今回は外部XMLファイルを使用した画像の指定です。
外部XMLを使用することで再ビルドすることなく更新できるのでメンテナンス性が向上します。

  1. XMLファイルの準備。
    今回は画像のファイルパスと画像の名前を記述した構造にしました。

    
    
    	画像1
    	画像2
    	画像3
    	画像4
    
    

    ファイル名をload.xmlとして保存
    (全て小文字にしてください)

  2. ASファイルからload.xmlファイルを読み込みます。

    package
    {
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;   
    
        public class Main extends Sprite
        {
            var pathXml:String = "load.xml";
            //XMLから読み込んだデータを入れる配列
            var name_list:Array = new Array();
            var path_list:Array = new Array();
            var url_loader:URLLoader ;   
    
            public function Main() {
                url_loader = new URLLoader(new URLRequest(pathXml));
                // 読み込み完了時に呼び出されるイベント
                url_loader.addEventListener (Event.COMPLETE,loadComplete);
            }   
    
            //XMLロード完了の処理
            function loadComplete (event : Event) {
                var xml : XML = new XML(url_loader.data);
                //データを配列に入れる
                for each (var xmlObj:Object in xml.img) {
                    name_list.push (xmlObj.text());
                    path_list.push (xmlObj.@src);
                }
                //ちゃんとに読み込まれたか確認
                for (var i:uint = 0; i < name_list.length; i++ ) {
                    trace(name_list[i]);
                    trace(path_list[i]);
                }
            }
        }
    }
    

    とりあえずこれで文字だけは表示できるはずです。

category : ActionScript
tag :

Comments(0)Trackbacks(0)

« Previous Page | Next Page »