« 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

  • Thomas
  • 2016年09月29日 21:19

cheers for the actual article i've recently been on the lookout with regard to this kind of advice on the net for sum time proper now so numerous thanks

Rattling great visual appeal on this web site, I'd value it 10.

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