< « 2009年01月 | main| 2009年03月 » >

透過png画像が綺麗に表示されない!回避方法メモ

FLASH勉強

2009年02月25日

Flash Player10まで進んでしまってる昨今でございますが、ポータル向けのバナー制作などではレギュレーションによりFlash Player6書き出しでなければいけなかったりします。

Flash Player6書き出し&透過png画像使用時に、Flashタイムライン上では綺麗に表示されているのにパブリッシュしたら汚くなってしまっていて多いにハマったのでメモ。

Flash Player6とFlash Player9での書き出し例

Flash Player6書き出し

pngTestfp6.jpg

左側問題なし、右側は汚い

Flash Player9書き出し

pngTestfp9.jpg

両方問題なし

使用したpng画像

詰め詰めで切り出ししたpng画像(汚くなる)

pngNG.jpg

Flash Player7,8,9では問題なかったが、Flash Player6書き出しで画像が汚くなった。

1px間を空けてで切り出ししたpng画像(問題なし)

pngOK.jpg

Flash Player6,7,8,9どれも問題なし

回避方法まとめ

Flash Player6(7もたまにあるかも?)書き出しにて、透過png画像を使用する時は、切り出し時に隙間を空けるべし。

stage幅取得のタイミングをテストしてみた

FLASH勉強

2009年02月01日

Flashはブラウザに依存しない!!って思っていたいが、
SWFObject v2.1を使用し、stage.stageWidthやstage.stageHeightを 取得しようとした時にどうもFirefoxにて上手く取得できない。


ということで
テスト
してみた。

FirefoxとSafariでの結果

Firefox

stageTest_firefox.jpg

Safari

stageTest_safari.jpg

実行したactionscript

  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.Event;
  4.     import flash.text.TextField;
  5.     import flash.text.TextFieldAutoSize;
  6.  
  7.     [SWF(backgroundColor="0xFFFFFF",frameRate="30",width="640",height="480")]
  8.     public class stageTest extends Sprite
  9.     {
  10.         private var _tf:TextField;
  11.         public const STAGEADDCHILD:String = "stageaddchild";
  12.         
  13.         public function stageTest()
  14.         {
  15.             _tf = new TextField();
  16.             //_tf.multiline = true;
  17.             _tf.autoSize = TextFieldAutoSize.LEFT;
  18.             //_tf.wordWrap = false;
  19.             addChild(_tf);
  20.             addEventListener(Event.ADDED_TO_STAGE , addStageHandler);
  21.             addEventListener(Event.ENTER_FRAME , enterframeHandler);
  22.             addEventListener(this.STAGEADDCHILD , stageAddChildHandler);
  23.         }
  24.         
  25.         private function addStageHandler(e:Event):void {
  26.             var str:String = _tf.text;
  27.             str += "Event.ADDED_TO_STAGE --" + "stageWidth = "+ stage.stageWidth + " -- " + "stageHeight = " + stage.stageHeight + "\r";
  28.             _tf.text = str;
  29.         }
  30.         
  31.         private function enterframeHandler(e:Event):void {
  32.             var str:String = _tf.text;
  33.             str += "Event.ENTER_FRAME --" + "stageWidth = "+ stage.stageWidth + " -- " + "stageHeight = " + stage.stageHeight + "\r";
  34.             _tf.text = str;
  35.             
  36.             if(stage.stageWidth>0) {
  37.                 removeEventListener(Event.ENTER_FRAME , enterframeHandler);
  38.                 dispatchEvent(new Event(STAGEADDCHILD));
  39.             }
  40.         }
  41.         
  42.         private function stageAddChildHandler(e:Event):void {
  43.             var str:String = _tf.text;
  44.             str += "stageOK";
  45.             _tf.text = str;
  46.             
  47.         }
  48.     }
  49. }

結果を踏まえて

Event.ADDED_TO_STAGEでイベント待ちすればOKとか、 Event.ENTER_FRAMEを一回ループすればOKと思っていたのですが、 どちらもダメのようです。

stage.stageWidthが取得できるまで待ち、dispatchEventしたほうがよさげ。

SWFObject v2.1の問題な気もしますが、みんなどういう対処しているのかな。。

< « 2009年01月 | main| 2009年03月 » >
Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD-ROM付)
クラスで書けるようになった。配列のpushとかspliceとかsliceとかややこしい部分の辞書代わりにも使ってます。XML関係もこれで覚えた。
ActionScript 3.0 アニメーション
vx,Math,cos,sinとか???な数学的な部分をこの本で理解できた気がします。逃げたいジャンルだけどFLASHに必須なジャンルなのよね。。
Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
ActionScript応用への第一歩。ただこれを読む前に入門ノート1を先に読んでおいた方がよさそう。ASの世界が広がった気がする本です。
Flash Creative Workshop
FLASHを始めて右も左も分からない時に救世主となった本。FLASHサイト制作法がなるほど!っと。ActionScriptバリバリの人はスルー。
FLASH OOP for ActionScript 3.0
FLASHの「今の主流」を知ることが出来る本。筆者の方々は総勢10人以上でかつ現在活躍中の方々ばかりなんでミーハー的な読み方もありかも。