homeへのリンクです。

Papervision 3D メモ2

2007年11月07日

今回も、下の本の”Papervision3DとAIRでの3D表現”の部分をやってみただけの話。

P144~P148にソースコードがあるので基本的にまねしてコードを書いて行けばよいのだが、最新バージョンのAIRだとこのままでは動かない。

デスクトップから、DragDropで、AIRアプリにデータを持ち込んだときに、そのデータは、イベントオブジェクトにくっついてくるTransferableDataオブジェクトから取得するようになっているのだが、AIRの新バージョンではこのTransferableDataクラスというのが、無くなったらしい。

変わりにClipboardクラスを使いなさいということのようだ。

それでファンクションを2つ以下のように修正した。

   //ドラッグイベントの処理
   public function onDragEnter(evt:NativeDragEvent):void
   {
      //転送データの取得
      //var data:TransferableData=evt.transferable;
      var clipboard:Clipboard=evt.clipboard;
			
      //転送データのフォーマットチェック
      //if(data.hasFormat(TransferableFormats.URL_FORMAT))
      if(clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
      {
         DragManager.acceptDragDrop(this);
      }
   }

コメントアウトされている箇所が古い書き方。
ここでは、デスクトップからのDragDropをAIRアプリの側で、受け入れる設定をしている。

   //ドロップイベントの処理
   public function onDragDrop(evt:NativeDragEvent):void
   {
      var result:String="DragDropTexture\n\n";
      var clipboard:Clipboard=evt.clipboard;
      //var data:TrnsferableData=evt.transferable;
			
      //if(data.hasFormat(TransferableFormats.URL_FORMAT))
      if(clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
      {
         //var url:String=String(data.dataForFormat(TransferableFormats.URL_FORMAT));
         var url:String=String(clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT,ClipboardTransferMode.CLONE_ONLY)[0].url);
         result+="URL:"+url+"\n\n";
				
         if(cmpFileExtension(url,".gif")||
            cmpFileExtension(url,".png")||
            cmpFileExtension(url,".jpg")||
            cmpFileExtension(url,".jpeg")
         ){
            //画像ファイルの場合
            if(loader==null)
            {
               loader=new Loader();	
            }
            loader.load(new URLRequest(url));
         }
      }
      textField.text=result;
   }

上は、データがDropされたときに、URLデータを抽出して、flash内のテクスチャ用のMovieClipにファイルをロードする部分。

動作させると以下のような感じになる。

DragDrop前。
dragdropsample1.png

DragDrop後。
dragdropsample2.png