重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

FLASH CS3 ActionScript3.0での質問です。
http://oshiete1.watch.impress.co.jp/qa5140171.html
の質問を参考に
背景画像がブラウザサイズにより拡大縮小するFLASH制作を
試みたのですが、下記のエラーとなってしまいます。

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at sb_fla::MainTimeline/arrangeMC()
at sb_fla::MainTimeline/sb_fla::frame1()

上記URLページを参考にすこしだけ変更して

// ムービー内の拡大縮小なし
stage.scaleMode = StageScaleMode.NO_SCALE;
// 整列の基準を左上にする
stage.align = StageAlign.TOP_LEFT;

// 「back_mc」 の初期横幅と高さを変数に記録しておく
var bw:Number = back_mc.width;
var bh:Number = back_mc.height;


// MC を整列させる関数 arrangeMC を定義
function arrangeMC():void{
//
// ローカル変数 sw にステージの幅を代入
var sw:int = stage.stageWidth;
// ローカル変数 sh にステージの高さを代入
var sh:int = stage.stageHeight;
//
// 「loader_mc」をステージ中央に配置
loader_mc.x = sw/2;
loader_mc.y = sh/2;
//
// 「main_mc」をステージ中央に配置
main_mc.x = sw/2;
main_mc.y = sh/2;
//
// 「galleryback_mc」をステージ下に配置
main_mc.x = sw/2;
galleryback_mc.y = (sh-sh)+720;
//
// 「back_mc」をステージの "幅に合わせて" リサイズ
back_mc.width = sw;
back_mc.height = bh/bw*sw;

// 「galleryback_mc」をステージの "幅に合わせて" リサイズ
galleryback_mc.width = sw;
}

// 上で定義したarrangeMCを即実行 (初期表示用)
arrangeMC();

// 関数 stageOnResize を定義
function stageOnResize(evt:Event):void {
// 上で定義したarrangeMCを実行 (リサイズ時用)
arrangeMC();
}

// ステージにイベントリスナーを登録
//引数(ステージリサイズ時に実行、実行関数stageOnResize)
stage.addEventListener(Event.RESIZE, stageOnResize);

というふうにしました。
タイムライン上には
loader_mc.
main_mc
galleryback_mc(サイズ変更)
back_mc(サイズ変更)
のムービークリップを配置しています。

今回のエラーについていろいろ調べたのですが
ActionScriptよりのムービークリップ配置ではなくじかにタイムライン上に配置することが問題なのでしょうか・・・
エラー回避できませんでした・・・

なにとぞご回答よろしくお願いいたします。
またこの他に良い方法があれば是非お教え下さい。

A 回答 (1件)

> ActionScriptよりのムービークリップ配置ではなくじかにタイムライン上に配置することが問題なのでしょうか・・・



それは問題ではありません.

TypeError: Error #1009:
このエラーはまだ、または既に参照できない
オブジェクト(のプロパティまたはメソッド)に
アクセスしようとしたときに起こります.(そのままですが…)

メインタイムライン1フレーム目にご質問のASを書いておられますが、
loader_mc
main_mc
galleryback_mc(サイズ変更)
back_mc(サイズ変更)
配置されているという以上のオブジェクトのうち、
いずれかが当該フレームではまだ登場していないのでは、と思います、
(ex.3フレーム目に配置)違っていたらすみません.
もし上記のようなミスだった場合は以下を試してみてください.

最小限の修正で、且つ1フレーム目より後に
オブジェクトを登場させたい場合は、
後で登場させるオブジェクト内1フレーム目に
以下のスクリプトを書きます.
ここでは例としてmain_mcを後から登場させるものとします.

//////////メインタイムライン 1フレーム目スクリプト修正

//ローカル変数としてではなくタイムライン変数として保持
var sw:int = stage.stageWidth;
var sh:int = stage.stageHeight;
// MC を整列させる関数 arrangeMC を定義
function arrangeMC():void{
sw = stage.stageWidth;//新しいステージ幅を取得
sh = stage.stageHeight;//新しいステージ高を取得

loader_mc.x = sw/2;
loader_mc.y = sh/2;

//main_mc.x = sw/2;←■削除
//main_mc.y = sh/2;←■削除

//main_mc.x = sw/2;//←■削除
~~
(以下同)

----------------------------

//////////main_mc内

//リサイズ用リスナーをステージのリサイズイベントに登録
stage.addEventListener(Event.RESIZE, mainResize);
//リサイズ用リスナー関数
//通常の関数として呼び出せるようイベントオブジェクトに
//デフォルト値(null)を設定
function mainResize(e:Event = null):void {
this.x = MovieClip(root).sw/2;
this.y = MovieClip(root).sh/2;
}
//初回登場時に(通常の関数として)実行
mainResize();
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!