0

MovieClip から拡張されたカスタム クラスがあります。このクラスは基本的に、MoveClip のフレーム ラベルを使用して、マウス イベントがディスパッチされるとボタンの状態間を移動するボタンを作成します。各状態 (それぞれ約 20 フレームの長さ) はタイムラインで終了しますstop()

このクラスは他の多くのプロジェクトで使用されていますが、現在のアプリケーションのある時点で、ボタン クラスの拡張として作成されたボタンはタイムラインでのコードの実行を停止し、ループで再生されます。これには、タイムラインに配置されたすべてのトレースが含まれますが、ボタンの状態が変化したときに gotoAndPlay が呼び出される場合でも、クラス内のすべてのコードは引き続き正しく実行されます。

最も奇妙な点は、ステージ上の誤動作するボタン インスタンスによってエラーがスローされないことです。

私が必要としているのは、特定のクラスを拡張するオブジェクトがエラーをスローすることなくタイムライン コードを実行するのを妨げる可能性のあるものを提案することです。

ありがとう!

更新:これにはまだ困惑しています。私たちのプロジェクトは通常、軽量のプリローダー、言語と年齢のゲート、メイン アプリケーションの 3 つの部分で構成されます。それぞれが現在のアプリケーション ドメインを使用して毎回以前に読み込まれます。メイン アプリケーションがロードされた後、MovieClip を (直接的または間接的に) 拡張するカスタム表示オブジェクトは、そのタイムラインで直接アクション スクリプトを無視します。ただし、再生ヘッドはクラスを介して制御できます。

更新 2: これは、私が作成したテスト ボタン クラスのコードです。何も入っていないことに注目してください。

package com.test
{
    import flash.display.MovieClip;

    public class TestLabelButton extends MovieClip
    {
        public function TestLabelButton():void
        {

        }
    }
}

更新 3: というわけで絞り込みましたが、変です。言語ゲートは、MovieClip を拡張するカスタム ドキュメント クラスを持つ swf で、プリローダーに問題なくロードできるようです。その後、MovieClip を拡張するカスタム doc クラスを含む SWF をさらにロードすると、その後インスタンス化されたその拡張子のすべての MovieClip で、タイムライン上のすべてのコードが失われます。

4

4 に答える 4

1

あなたが説明していることから、コンパイルエラーでFlashIDEでSWFを実行するときのように聞こえます。
すべてのフレームをループします。
通常のフラッシュボタンがちらつく前に見たことがあると思います。

問題のあるMovieClipを取得して、それを単独で新しいプロジェクトに入れて、何が起こるかを確認しようとしましたか?

于 2011-04-14T20:41:06.693 に答える
0

私が推奨するのは、状態に必要なアニメーションが独自のループ タイムラインを持つ独自のクリップで発生するように、ムービークリップ ボタンを設計することです。つまり、ボタンの各「状態」には、ボタン クリップのタイムライン上に 1 つのフレームがあり、メイン タイムラインでの通常の再生やループはありません。すべての再生ヘッド コントロールは外部クラスにあり、メイン タイムラインを制御する * gotoAndStop * と、各ボタン状態フレームでアニメーション クリップのタイムラインを開始および停止する stop() および play() コマンドのみで構成されます。

要するに、クリップの再生ヘッドを複数の場所から制御しようとしないでください。これを行うと、奇妙で​​、しばしば再現が困難な制御競合バグが発生するからです。

また、フレーム スクリプトにエラーがあると、Flash Player はそのクリップでフレーム スクリプトを実行できなくなります。コンパイル時のエラーまたは警告が発生していますか?

于 2011-04-12T15:26:37.483 に答える
0

あなたの問題を完全に理解しているかどうかはわかりませんが、これは私が過去に抱えていた問題と非常によく似ているように思えます。私も同じことをします。ボタン シンボルを使用することはなく、常にムービークリップを使用することを選択します。これはより柔軟で、すべてのボタン状態のアニメーションがすぐに表示されるため、はるかに直感的な作業方法を見つけることができます。

とにかく、フレーム ラベル/名前を介して呼び出しているフレームが、そのフレームにないことを確認してくださいstop()。私はロールオーバー アニメーションの開始時に fRollOver フレーム ラベルを持っているという間違いを数回犯しましたgotoAndPlay("fRollOver")

私が見つけたもう 1 つのことは、これを何度も経験してきたことですがstop()、最初のフレームですぐに停止すると、ブレーキがかかることがあります。Flash はときどき気に入らないことがありますが、これについては説明できません。それは確かに私のほとんどすべてのプロジェクトで機能します。Flash のバージョンの問題かもしれません。

于 2011-04-12T15:09:54.483 に答える
0

The_asMan は正しい軌道に乗っていると思います。これを引き起こしている実行時エラーが発生しているか、Flash IDE を使用して、MovieClip クラスで本質的に「プロトタイプ」を作成するような方法でオブジェクトの継承を構築できていると思います。あなたが AS2 または AS1 の人なら、私が言いたいことを理解できるでしょう。あなたのクラスは本質的に空なので、オプション 2 に傾いています。Flash UI を使用して MovieClip クラスを何らかの形でオーバーライドしたか、そのプロトタイプを作成したと思います。

また

オブジェクトを間違って作成し、設計時に複数のインスタンスをステージに配置しました。このような:

ここに画像の説明を入力

もちろん問題は、このライブラリ オブジェクトを CLASS OF TYPE のカスタム クラスにする代わりに、一意の識別子を使用して、このムービー クリップのコンテンツを単一のクラスにリンクしただけであることです。この場合、デザイン UI を使用してステージ上に複数のインスタンスを作成すると、技術的にエラーが発生するため、実行時にフラッシュはおそらく、これらのオブジェクトを動的に生成された独自のクラスに宣言することで、この間違いを自動的に補正します。異常な方法。これを行う適切な方法は、actionscript 構成のエクスポートをそのままにして、コードでこのクラスのインスタンスを作成するか、オブジェクトの基本クラスをカスタム クラスに設定して一意の識別子を与えることです (デザインビューでのレイアウト、下の例)。

ここに画像の説明を入力

そのため、Flash は、デザイン ビューで特定の基本クラスを使用してオブジェクトを作成したことを事前に認識し、そこから継承する必要があることを認識しています。上記の状態では、バイトコードが仮想マシンにヒットし、「WOA、ステージ上にまったく同じクラスのコピーが 10 個必要ですか? それはうまくいかないので、ここでいくつかの汎用オブジェクトを作成して、それらのビジュアルを使用します。それらの内容。」とにかく、私は自分自身を繰り返していると思うので、これが役に立てば幸いです。ただの理論です。:)

于 2011-04-15T13:08:23.027 に答える