今回も、下の本の”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前。
DragDrop後。
« Flex Builder 3 beta2 メモ1 | MAX 2007 | モバイルコンテンツ制作の効率化、そして楽しくなる方法 »