2007.06.18
category
comments

AMFPHPを試す

AMF通信をやってみる。まずはFlash Remoting用のコンポーネントをダウンロードしてインストールする。

次にamfphpをダウンロード。現時点でのバージョンはamfphp-1.2.6。解凍してamfphpフォルダごとlocalhost直下にアップする。

今回の場合はhttp://localhost/amfphp/browser/index.htmlにアクセスしてデフォルト画面が表示されていればインストール成功となる。この画面がサービスブラウザとなりコードの修正や引数のやりとりを確認する事ができる。ここからはサービス用のphpファイルとflaファイルを作成。

■HelloWorld.php(クラス名とファイル名を統一すること)

PHP:
<?php
class HelloWorld
{
    //-----[AMFPHPのテーブル設定]
    function HelloWorld()
    {
        $this->methodTable = array
        (
            "say" => array
            (
                "access" => "remote",
                "description" => "文字列を返します"
            )
        );
    }
   
    //-----[flashから呼ばれる関数]
    function say($sArgments)
    {
        return 'You said: ' . $sArgments;
    }
}
?>

フラッシュからの引数は$sArgmentsに格納される。このphpをhttp://localhost/amfphp/servicesにアップする。
※この状態でサービスブラウザにアクセスするとHelloWorldがサービスとして登録される。

■HelloWorld.fla(ルートの1フレーム目)

ACTIONSCRIPT:
import mx.remoting.*;
import mx.rpc.*;
import mx.remoting.debug.NetDebug;

var gatewayUrl:String = "http://localhost/amfphp/gateway.php";

NetDebug.initialize();
var _service:Service = new Service(gatewayUrl, null, 'HelloWorld', null , null);
var pc:PendingCall = _service.say("Hello!");
pc.responder = new RelayResponder(this, "handleResult", "handleError");

function handleResult(re:ResultEvent)
{
trace(re.result);
}

function handleError(fe:FaultEvent)
{
trace("エラー");
}

トレースすると"You said: Hello!"が出力される。xmlを経由しなくてもphpとflashでオブジェクトのやりとりが出来るので便利。DBからセレクトしたデータをflashに直接渡したり、phpに配列を渡したりとかなりお手軽にできそう。ここまでくるとMovableTypeとかでxmlを出力してflashに読み込ませるCMS的パターンは壊滅なんじゃないかと。従来のXMLを読み込んでパースかけるやり方よりも高速に送受信ができるらしい。なるほど。

2007.06.15
category
comments

外部画像を読み込んでスムージング

画像の読み込みをリスナーで捕まえるにはcontentLoaderInfoを使う。スムージングをかけるには読み込み完了時にビットマップ化して、スムージングプロパティをtrueにする。回転させるとスムージングがかかってるのが良く分かる。

ACTIONSCRIPT:
var imgLoader:Loader = new Loader();
imgLoader.load(new URLRequest("画像のurl"));
imgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

//-----[読み込み中イベントの処理]
function onProgress(e:Event):void
{
    trace("progress = " + Math.round((e.bytesLoaded * 100) / (e.bytesTotal)));
}

//-----[読み込み完了イベントの処理]
function onComplete(e:Event):void
{
    //-----[スムージング処理]
    var loadedImage:Bitmap = Bitmap(imgLoader.content);
    loadedImage.smoothing = true;
    addChild(loadedImage);
    loadedImage.rotation = 15;
}

2007.06.10
category
comments

ムービークリップのカーソルアイコンについて

AS3ではMouseEventをリスナーに登録しても標準では指アイコンに変化しない。アイコンを変える時は明示的に設定してやる必要あり。

ACTIONSCRIPT:
mc.buttonMode = true;
mc.useHandCursor = true;

buttonModeをtrueにしておかないとuseHandCursorが効かないのだ。ちょっとハマったのでメモ。

2007.06.05
category
comments

Tweenerについて

Tweenerを使ってみる。

ACTIONSCRIPT:
import caurina.transitions.Tweener;
Tweener.addTween(mc, {alpha:0, time:1, transition:"easeOutExpo", delay:0, onComplete:hoge, onCompleteParams:["hello"]});
 
hoge = function(s:String)
{
    trace(s);    //hello
}

こうする事で1秒でアルファを0にイージングして、完了後にコンプリートハンドラーよりhoge()がコールバックされて"hello"がトレースされる。基本Fuseと使い方は一緒だな。

その他のイベントパラメータはこちら。
・onStart
・onStartParams
・onUpdate
・onUpdateParams
・onComplete
・onCompleteParams
・onOverwrite
・onOverwriteParams

page 1 / 11