Home > Flash > ActionScript2.0
ActionScript2.0 Archive
[AS2]FlashでSWFや画像などを外部から読み込む際にキャッシュさせない
- 2009-06-30 (火)
- ActionScript2.0 | Flash
FlashコンテンツでSWFや画像データを外部から読み込む際に、ブラウザでキャッシュさせない方法をメモ。頻繁に更新する必要のあるFlashコンテンツでは、更新した内容が反映されない可能性あるので、キャッシュ対策が必要。
具体的には、読み込みたいデータのパスに「?=現時刻」をプラスしてあげて、常に別のデータとして読み込ませる。例えば、CASA FrameworkのMediaLoadを使用して、test.jpgを外部から読み込む場合のキャッシュ対策はこんな感じ(ほぼCASAのサンプルそのままです)。
this.stop(); Stage.align = "TL"; Stage.scaleMode = "noScale"; import org.casaframework.load.media.MediaLoad; this.createEmptyMovieClip("loadZone_mc", this.getNextHighestDepth()); function onImageLoadProgress(sender:MediaLoad, bytesLoaded:Number, bytesTotal:Number):Void { trace(bytesLoaded + "/" + bytesTotal + " bytes have been loaded into " + sender.getMovieClip()); } var nowDate:Date = new Date();//現時刻を取得してnowDateに設定 var mediaLoad:MediaLoad = new MediaLoad(this.loadZone_mc, "test.jpg" + "?=" + nowDate); this.mediaLoad.addEventObserver(this, MediaLoad.EVENT_LOAD_PROGRESS, "onImageLoadProgress"); this.mediaLoad.start();
現時刻の部分は、ユニークな値であれば問題ないと思うので、乱数など他の値でもでも問題ないと思われます。ちなみに画像データだけでなく、swfやxmlなどでも同じ方法でキャッシュ対策可能。
【参考にさせて頂いたサイト】
- Comments: 0
- Trackbacks: 0
[AS2]Flickr API経由で取得した画像がFlashで表示されない
- 2009-05-13 (水)
- ActionScript2.0
Flashで、Flickr API経由で画像を表示するテストをしてみたら、ローカル環境では問題なく表示されるのに、サーバにアップロードしたら何も表示されない。いろいろ検証してみたところ、Flickrから取得した画像にスムージングをかけようとすると、何も表示されない模様。Flash Player8以上で、外部画像を読み込んだ場合、シャギーが出てギザギザの画像になってしまうので、スムージングを適用したかったのだけど、なかなかうまくいかなかったので、解決方法をメモ。スムージングについては、以前書いた、「[AS2]Flashで外部から読み込んだ画像データにスムージングを適用する」を参照。
System.security.loadPolicyFile("http://api.flickr.com/crossdomain.xml"); System.security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml"); System.security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml"); System.security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml"); System.security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");
上記のスクリプトを追加すると、スムージングを適用しても問題なく表示可能でした。クロスドメインとかセキュリティーの問題と思われます。
【参考にさせて頂いたサイト】
鮭とプログラムとかサン「スライドショー 2」
- Comments: 0
- Trackbacks: 0
[AS2]Flashで外部から読み込んだ画像データにスムージングを適用する
- 2009-04-21 (火)
- ActionScript2.0 | Flash
Flashで外部から画像データを読み込んで、リサイズしたり回転させたりして使用する場合、シャギーが出てギザギザが目立ってしまう。Flash Player7だと、何もしなくてもスムージングがかかった状態で表示されていたみたいで、問題なかったのだけど、8以上だとギザギザになってしまう。いろいろ調べてみたら、Flash Player8から仕様が変更になったらしく、ひと手間かけないとスムージングが適用できない模様。よく使いそうなのでメモ。
flaファイルと同じ階層に「photo.jpg」を用意して、メインのタイムラインの1フレーム目に、下記スクリプトを記述すれば、外部画像にスムージングを適用可能(AS2です)。
import flash.display.BitmapData; this.createEmptyMovieClip("containerOriginal", this.getNextHighestDepth()); this.createEmptyMovieClip("containerSmoothing", this.getNextHighestDepth()); var listenerObj:Object = new Object(); listenerObj.onLoadInit = function(){ bitmapSmoothing(); } var mcl:MovieClipLoader = new MovieClipLoader(); mcl.addListener(listenerObj); mcl.loadClip("photo.jpg", this.containerOriginal); function bitmapSmoothing() { var smoothImage:BitmapData = new BitmapData(this.containerOriginal._width, this.containerOriginal._height, true, 0x000000); smoothImage.draw(this.containerOriginal); this.containerSmoothing.attachBitmap(smoothImage, 0, "auto", true); this.containerOriginal.removeMovieClip(); }
画像を読み込んで、読み込みが完了したら、BitmapDataに変換してスムージングを適用して元画像をリムーブという流れ。元画像の読み込みが完全に完了してから、スムージング処理をしないと、うまく動作しないみたいなので注意。このスクリプトの場合、onLoadInitでロード完了を取得して、bitmapSmoothing関数でスムージングを適用してます。
元画像をリムーブしないで、角度をつけて比較してみるとこんな感じ(左がスムージング適用前で、右がスムージング適用後)。

ライブラリから読み込む場合は、プロパティからスムージングの適用を選択できるので問題はないけど、スクリプトベースで外部から引っ張ってくる場合は、こんな感じで解決するみたいです。もっと簡単な方法とかあるのかもしれないけど、とりあえずこの方法で解決しました。
【参考にさせて頂いたサイト】
AS2で読み込んだ外部画像にスムージングを適用する
FLASH8-ビットマップスムージングをスクリプトで制御したい
- Comments: 0
- Trackbacks: 0