トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     MovieClip.loadMovieでロード待ち後の変数取得
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
miyaj
Åê¹ÆNo.23830
投稿日時: 2006-2-17 10:37
新米
居住地:
投稿: 13
使用環境:
Win7
FlashCS5
MovieClip.loadMovieでロード待ち後の変数取得
MovieClip.loadMovieで、swfをロードし、ロード待ち後にロードしたswfより変数取得について教えてください。
環境はWinXPsp1で、今回はFlashMX2004/ActionScript2.0を使用し、FlashPlayer6でパブリッシュしております。

loadMovieで特定のMCにswfをロードし、ロード待ちを行った直後、ロードしたswfのルートタイムラインに設定された変数値を取得しようとしましたが、undefinedとなり取得できませんでした。
ロード待ちを行った直後はタイムラインが進んでおらず、タイムライン1フレーム目に設定した変数は取得できないということでしょうか。
_widthや_heightなら取得できるかと思い、同様のタイミングで取得を試みましたが、0となってしまい、正常に取得できていないようです。

以下のようなスクリプトをクラスファイルに書いております。
class LoadMC extends MovieClip {
    //メンバ変数
    private var loaded_mc:MovieClip;//ロードされるMC
    private var loadIntId:Number;//インターバルID
    private var cardinalX:Number;//swfよりの変数値を入れる
    private var cardinalY:Number;//swfよりの変数値を入れる

    //ロードする 他のObjectより実行
    public function startLoad() {
        loaded_mc.loadMovie(URL);
        loadIntId = setInterval(this,"loadedCheck",1);
    }

    //ロード完了チェック
    private function loadedCheck() {
        //trace(this._name + ":" + loaded_mc.getBytesLoaded() + "/" + loaded_mc.getBytesTotal());
        if (loaded_mc.getBytesTotal() > 0 && loaded_mc.getBytesLoaded() >= loaded_mc.getBytesTotal()) {
            clearInterval(loadIntId);
            //変数取得
            cardinalX = loaded_mc.cardinalX;
            cardinalY = loaded_mc.cardinalY;
        }
    }
}


ロード完了した時点で変数を取得する方法はないでしょうか。
よろしくお願いいたします。
森 なおき
Åê¹ÆNo.23842
投稿日時: 2006-2-17 16:49
モデレータ
居住地: 福岡(心は大阪)
投稿: 527
使用環境:
:MacOSX10.6.8
:FlashCS5.5
Re: MovieClip.loadMovieでロード待ち後の変数取得
なおきです。

まずActionscript2.0で記述されているなら
FlashPlayer7以降で書き出すことが推奨されます。

一応、エラーなくplayer6形式でも書き出されますが
動作しないことも多くあります。
またPlayer7以降ならばMovieClipLoaderClassを
利用することも検討されてはいかがでしょうか?


----------------
な お き
Dev.:MacOSX+FlashCS5.5
View:---

miyaj
Åê¹ÆNo.23847
投稿日時: 2006-2-17 19:20
新米
居住地:
投稿: 13
使用環境:
Win7
FlashCS5
Re: MovieClip.loadMovieでロード待ち後の変数取得
ご回答ありがとうございます。
引用:
まずActionscript2.0で記述されているなら
FlashPlayer7以降で書き出すことが推奨されます。

一応、エラーなくplayer6形式でも書き出されますが
動作しないことも多くあります。

一応はヘルプで調べつつ、Player6で使用できるもののみ使用して作っています。
それとも、クラスファイルを作成してPlayer6で書き出すと動作しない場合があるのでしょうか。スクリプトはflaのタイムラインに記述した方が良いのでしょうか。

本当はMovieClipLoaderClassを使用できれば良いのですが、
Player6以上に対応させないといけないため、使用しておりません。

今回の件はとりあえずonEnterFrameで1フレーム待つことで、今のところ解決しております。
少しでも早くswfを表示したいので、ロードー終了後すぐに処理したかったのですが、あまり変わらないですかね。
野中文雄
Åê¹ÆNo.23848
投稿日時: 2006-2-17 20:10
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClip.loadMovieでロード待ち後の変数取得
「ロード待ちを行っ」ていないからでしょう。

1ミリ秒後のターゲットMovieClipは、外部swfをロードする前の状態で、バイト数が0でありません(4以上です)から、ロード前の変数値を取得しています。
引用:
miyajさんは書きました:
loadMovieで特定のMCにswfをロードし、ロード待ちを行った直後、ロードしたswfのルートタイムラインに設定された変数値を取得しようとしましたが、undefinedとなり取得できませんでした。

したがって、ロード待ちをするためには、ターゲットMovieClipの初期バイト数を取得しておき、その値よりMovieClip.getBytesTotal()の値が大きいことを判定するか、ターゲットインスタンスのMovieClip._urlの値が変わったことを確認するなどの必要があるでしょう。

もっとも、取得したいのが外部swfの第1フレームで設定されている変数値でしたら、そのフレームアクションの完了を待たなければなりませんので、MovieClip.onEnterFrameイベントで処理を1フレーム遅らせるのが端的だと思われます。
引用:
miyajさんは書きました:
今回の件はとりあえずonEnterFrameで1フレーム待つことで、今のところ解決しております。

「早くswfを表示したい」のですか? でしたら、過剰なsetInterval()関数の呼出しは、Flash Playerの他の処理を遅らせこそすれ、早めることはないと思います。
引用:
少しでも早くswfを表示したいので、ロードー終了後すぐに処理したかったのですが、あまり変わらないですかね。


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

miyaj
Åê¹ÆNo.23879
投稿日時: 2006-2-20 11:26
新米
居住地:
投稿: 13
使用環境:
Win7
FlashCS5
Re: MovieClip.loadMovieでロード待ち後の変数取得
野中様 ご回答ありがとうございます。
関係ないですが、野中様のサイトや本はいつも参考にさせていただいています。
こんな超有名人にご回答いただけるとは感激です

今回の件、大変よく理解できました。

やはりロード待ちを行ったところで、フレームアクションの完了は待たなければいけないわけですね。
引用:
「早くswfを表示したい」のですか? でしたら、過剰なsetInterval()関数の呼出しは、Flash Playerの他の処理を遅らせこそすれ、早めることはないと思います。

なるほど。このことから、setInterval関数は使わず、onClipEvent(data)で処理するよう変更いたしました。

質問ばかりで申し訳ないのですが、onClipEvent(data)はMovieClipアクションに記述しないといけないですよね?スクリプトの分散を避けたいので、MovieClipアクションには余り記述したくないのですが、クラスファイル内で使用できる同じような方法はないでしょうか。

よろしくお願いいたします。
野中文雄
Åê¹ÆNo.23881
投稿日時: 2006-2-20 12:24
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClip.loadMovieでロード待ち後の変数取得
まいど、ありがとうございます。
引用:
miyajさんは書きました:
関係ないですが、野中様のサイトや本はいつも参考にさせていただいています。

そのために実装されたのが、MovieClipLoaderクラスなんです。
引用:
質問ばかりで申し訳ないのですが、onClipEvent(data)はMovieClipアクションに記述しないといけないですよね?スクリプトの分散を避けたいので、MovieClipアクションには余り記述したくないのですが、クラスファイル内で使用できる同じような方法はないでしょうか。

もっとも、MXの時代にロード用のクラスを書かれた人は、何人かいらっしゃいます。一番有名なのは、Colin MoockさんのAPIをもとにLoaderClassを作成されたRalf Bokelbergさんでしょう。

helpQLODhelp:
LoaderClass 1.02 released
LoaderClass Documentation

それをまた、ActionScript 2.0に翻訳した人もあるようです(フランス語なので、内容はよくわかりませんけど)。

in progress「Bokel LoaderClass actionscript 2 translation

ただ、ここでbokelさんのクラスを覚えたところで、Flash Player 7以降は使う必要がなくなりますから。どうするかは、考えどころですね。あと、LoaderClass内で処理を監視するためには、setInterval()関数が使われているようです。まぁ、「過剰」に使用しなければ、よいでしょう(「過剰」というのは、インターバルの設定で、miyajさんが1ミリ秒を指定されていたことを指しています)。


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

miyaj
Åê¹ÆNo.23897
投稿日時: 2006-2-20 19:33
新米
居住地:
投稿: 13
使用環境:
Win7
FlashCS5
Re: MovieClip.loadMovieでロード待ち後の変数取得
ご回答ありがとうございます。
引用:
そのために実装されたのが、MovieClipLoaderクラスなんです。

全くその通りですね。おかしな質問をしてしまいました。

今回はローダークラスを使わず、このままで行こうと思います。
お答えいただいた皆様、ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops