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

  • このエントリーをはてなブックマークに追加
  • 80

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

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

ActionScript

  1. /**
  2.  * アニメーション制御を行う
  3.  */
  4. private function onEnterFrame(evt:Event):void{
  5.     this.position -= this.speed;
  6.    
  7.     if(this.position + this._label1.width < 0){
  8.         this.position = this._label2.x;
  9.     }
  10. }
  11. &#91;/as]
  12. <code>this.position</code>は位置、<code>this.speed</code>は移動速度だ。
  13. 記事タイトルが左に消えつつ右から出ると言う仕組みを実現するため、内部的には2つのラベルを使用している。下記の関数内のif文は、左端に消え行くラベルが完全に消えたと同時に、右から出てきていたラベルの位置に移動することで、無限ループを実現している部分だ。
  14. でまぁ、このような仕組みでアニメーションを行っている「Matrix風RSS表示」を、2つの方法で3D表示してみたんだが、どちらも残念な結果に終わったと言わざるを得ない。
  15. まず、読み込んだコードはこんな感じ。
  16. [as]
  17. //2DでRSSを表示するクラスが、RSSMatrixViewである。
  18.  
  19. //DisplayObjectとしてnewする。
  20. var rmv:RSSMatrixView = new RSSMatrixView(new Rectangle(0, 0, 400, 300));
  21. rmv.addEventListener(Event.COMPLETE, function(e:Event):void
  22. {
  23.     var mt:MovieMaterial = new MovieMaterial(rmv, true, true, true);
  24.     mt.doubleSided = true;
  25.     var p:Plane = new Plane(mt, 400, 300, 4, 4);
  26.     scene.addChild(p);
  27.     addEventListener(Event.ENTER_FRAME, function(e:Event):void
  28.     {
  29.         p.rotationY += 2;
  30.     });
  31.     startRendering();
  32. });
  33. rmv.load(new URLRequest("http://blog.tarotaro.org/feed"));
  34.  
  35. //swfファイルを読み込む
  36. var loader:Loader = new Loader();
  37. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
  38. {
  39.     var mt:MovieMaterial = new MovieMaterial(loader, false, true, true);
  40.     mt.doubleSided = true;
  41.     var p:Plane = new Plane(mt, 400, 300, 4, 4);
  42.     p.rotationY = 90;
  43.     scene.addChild(p);
  44.     addEventListener(Event.ENTER_FRAME, function(e:Event):void
  45.     {
  46.         p.rotationY += 2;
  47.     });
  48.     startRendering();
  49. });
  50. loader.load(new URLRequest("rss.swf"));
  51. loader.scaleX = loader.scaleY = 0.5;

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

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

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

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

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

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク