• 締切済み

クラスからステージの参照方法

お世話になります。 ActionScript3に関する質問です。 現在カスタムクラスを勉強中です。 カスタムクラスからstage.stageWidthを見に行きたいのですが、 『nullのオブジェクト参照のプロパティまたはメソッドに アクセスすることはできません・・・』というエラーが出てしまいます。 カスタムクラスからアクセスするにはどのように記述すれば良いでしょうか? また、stage以外でもクラスからこういうアクセスが汎用的 という例があればアドバイスいただけると幸いです。 お手数ですが、宜しくお願いいたします。

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

クラスを設計する際には、外部のオブジェクトを直接参照しない設計にするのが一般的です。 外部のオブジェクトを直接参照するようなクラスは汎用的ではない=クラスにする意味が薄い、との理由です。 いやいや、外部のオブジェクトを操作するクラスはよくあるじゃないか、と思われるかも知れません。 var hoge = New HogeHoge(); hoge.target = fuga; 上記のように、外部から参照を設定して、クラス内から外部オブジェクトを操作できるようにします。 ※もちろんクラス内では、target(=fuga)を変数に保持して以降targetに対してあらゆる操作を行います。 クラスにするからには、クラス外の事はクラス自身は何も知らなくて良い。 それがクラスの設計手法で、どんな言語でも共通の事と言えます。

John12345
質問者

お礼

ご回答いただきましてありがとう御座います。 まだクラスの勉強をはじめて間もないですが、可能な限り汎用的な 作りにしたいと考えておりますので、外部のオブジェクトを参照しない ような作りにしたいと思います。 先にご回答いただいた方への返信にも記載しておりますが、 リサイズイベントで変更されたstageの値を外部クラスから 処理したいと思いますが、どの様な方法が綺麗なやり方でしょうか? 具体的にお教えいただけると幸いです。 宜しくお願いいたします。

回答No.1

stageプロパティはDisplayObjectのプロパティです インスタンスがステージにaddChildされるまではnullです DisplayObjectクラスの拡張クラスでないなら 直接stageプロパティを作ってステージを教えてやるか ステージにあるDisplayObjectのインスタンスを プロパティに持っているならそれのstageを取得する というような方法で取得できます

John12345
質問者

お礼

ご回答ありがとう御座います。 具体的には、下記に記載している画面のリサイズ時の処理を 外部クラス化したいと考えております。 画面のリサイズ時のRESIZEイベントを発生させた際に、 リサイズ後のstageの値を得るにはどうしたら良いでしょうか? 度々申し訳御座いません。 stage.addEventListener(Event.RESIZE, onStageResize); function onStageResize(event:Event):void { // ステージサイズを再計算 stageW = stage.stageWidth; stageH = stage.stageHeight; // ここにリサイズ処理が入る }