« Flex Builderの補完(player10追加モノ)メモ | main | 透過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の問題な気もしますが、みんなどういう対処しているのかな。。

trackbacks

trackbackURL:

comments

comment form
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人以上でかつ現在活躍中の方々ばかりなんでミーハー的な読み方もありかも。