Papervision3DのMovieMaterialの挙動がよく分からん。スクリプトでのアニメーションじゃ駄目なのかな。

このエントリをはてなブックマークに追加このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加このエントリをkwoutに追加
2008年9月16日 火曜日1:59:25

まず、俺が初めてAS3.0で作ってみた、「Matrix風RSS表示」のサンプルを作り直してみた。そのdemoがこちら
で、次にこの辺りを参考にして、こいつをPapervision3DのMovieMaterial使って読み込んでみた。そのdemoがこちら
背景が透明な方は、「Matrix風RSS表示」のメインになったクラスを直接newして、DisplayObjectの子クラスとして使っている。で、背景が黒な方は、「Matrix風RSS表示」のswfファイルを読み込んで使っている。

まず言いたいのは、両方おかしいと言うこと。
「Matrix風RSS表示」では、文字列部分(記事タイトル)の移動を、Event.ENTER_FRAME用のリスナー関数で行っている。つまり、こんな感じ。

/**
 * アニメーション制御を行う
 */

private function onEnterFrame(evt:Event):void{
    this.position -= this.speed;
   
    if(this.position + this._label1.width <0){
        this.position = this._label2.x;
    }
}

this.positionは位置、this.speedは移動速度だ。
記事タイトルが左に消えつつ右から出ると言う仕組みを実現するため、内部的には2つのラベルを使用している。下記の関数内のif文は、左端に消え行くラベルが完全に消えたと同時に、右から出てきていたラベルの位置に移動することで、無限ループを実現している部分だ。
でまぁ、このような仕組みでアニメーションを行っている「Matrix風RSS表示」を、2つの方法で3D表示してみたんだが、どちらも残念な結果に終わったと言わざるを得ない。
まず、読み込んだコードはこんな感じ。

//2DでRSSを表示するクラスが、RSSMatrixViewである。

//DisplayObjectとしてnewする。
var rmv:RSSMatrixView = new RSSMatrixView(new Rectangle(0, 0, 400, 300));
rmv.addEventListener(Event.COMPLETE, function(e:Event):void
{
    var mt:MovieMaterial = new MovieMaterial(rmv, true, true, true);
    mt.doubleSided = true;
    var p:Plane = new Plane(mt, 400, 300, 4, 4);
    scene.addChild(p);
    addEventListener(Event.ENTER_FRAME, function(e:Event):void
    {
        p.rotationY += 2;
    });
    startRendering();
});
rmv.load(new URLRequest("http://blog.tarotaro.org/feed"));

//swfファイルを読み込む
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
{
    var mt:MovieMaterial = new MovieMaterial(loader, false, true, true);
    mt.doubleSided = true;
    var p:Plane = new Plane(mt, 400, 300, 4, 4);
    p.rotationY = 90;
    scene.addChild(p);
    addEventListener(Event.ENTER_FRAME, function(e:Event):void
    {
        p.rotationY += 2;
    });
    startRendering();
});
loader.load(new URLRequest("rss.swf"));
loader.scaleX = loader.scaleY = 0.5;

前半がnewする方、後半が読み込む方だ。
表示制御が適当なので、タイミングによっては両者が重なってしまう事には目をつぶって欲しい。

残念ポイントは次の3箇所だろう。

  • 滑らかだったアニメーションは見る影も無くガタガタで、時々思い出したように表示が更新され、記事タイトルが大移動している
  • newした方(背景透明)は、何故か幅の認識がおかしいようで、ラベルが2つ(消え行く用と出て来る用)見えてしまっている。
  • swf読み込みの方は、大きさが元々の640x480になっているらしく、3D化したものは多分左上しか出てきていない

これらの残念ポイントの原因を究明したいが、正直言って全く分からない。
全く分からないので記事にしておいたと言う状況だ。本当はこの3D表示とARを組み合わせて、何の実用性もなさそうだけどちょっと格好良くて、かつFlashならではな感じのするARコンテンツ「FLARSSリーダー。Matrix風味」と言うのを作りたかったんだが。

追記:ソースをSpark Projectにコミットしてみた。ちょっと手が滑って色々凄い事になりかけたが、大丈夫かな。
ソースはこちら。http:
//www.libspark.org/browser/as3/RSSMatrixView

トラックバック URL :

コメントをどうぞ

HTML convert time: 1.204 sec.