0

外部 SWF をロードし、さまざまな方法でそれらを制御する Flash AS3 プロジェクトがあります。読み込まれた SWF ファイルの一部には、新しいプレゼンテーションに移動する [次の選択] ボタンがあります。メインの外部ロード SWF には、次のコードがあります。

setTimeout(function() {dispatchEvent(new Event("nextPresentation", false));}, 4000);

セット内の次の選択に自動的に移動します。このコードは、私が望むとおりに機能します。

次に読み込まれる SWF では、タイムアウトが発生する代わりに、すべてのタイムラインの最後に次の選択を示すボタンが表示されます。そこで、そこに次のコードを追加しました。

function nextSelectionClick(evt:MouseEvent) {
    trace('here123');
    dispatchEvent(new Event("nextPresentation", false));
} 

何らかの理由で、そのイベントは、SWF をロードしたファイルに到達しません。トレースを取得しているため、クリックイベントに到達していると確信していますが、タイムアウトとまったく同じ動作であるように見えても、イベントが発生することはありません。ここで何が欠けていますか?そのコードがボタン クリックとタイムアウトの動作が異なるのはなぜですか?

ありがとう

4

3 に答える 3

3

それらが同じように機能するはずであるという点であなたは正しいですが、アプリケーションで他に何が起こっているのかという大きな疑問が残ります. 問題はここではなく、どこかにあるようです。

このような質問はしたくありませんが、イベントがルート表示オブジェクトから発生していることは確かですか? そこから発砲していなければ、外部には聞こえません。

申し訳ありませんが、実際のコードをもっと見るか、状況について詳しく知らなければ、これ以上のことは言えません。

タイラー。

于 2009-05-11T23:49:41.203 に答える
1

I think you've set the bubbles attribute to false. This will prevent the event from bubbling up any further than the container it resides in.

Try this instead:

dispatchEvent(new Event("nextPresentation", true));

Also, regarding organization, I'd make a PresentationEvent class and have SKIP_PREVIOUS and SKIP_NEXT event constants on them. This is more consistent with the event model that ActionScript uses and it cuts down on redundancy. This way you can pass the current presentation and other handy presentation-related data as part of the event.

于 2009-05-12T00:04:37.870 に答える
0

ディスパッチ カスタム イベントも使用していますが、機能する場合と機能しない場合があります。例えば:

private function rollBackAction
{
  var atd:Class =  getDefinitionByName("com.utils."+CreateList.currentClass) as Class;
  dispatchEvent(new AppEvent("RollBackAction",{}));

}

と使用関数

package com.utils
{

import com.components.mouseOverAct;
import com.model.CreateList;
import com.SequenceCheck.SeqCheck;
import com.events.AppEvent;


import flash.display.MovieClip;

import flash.events.MouseEvent;

import flash.events.Event;


public class RightRotate extends mouseOverAct
{
    private var rotateBool:Boolean;
    private var XposIntial:Number;
    private var A:Number;
    private var An:Number;
    private var angle:Number;
    var mc:MovieClip;
    private var frameCount:int;

    public function RightRotate()
    {
        trace("main")
        this.buttonMode = true;
        this.addEventListener("RollBackAction",rollingBack);
        knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
    }
    private function rollingBack(e:AppEvent)
    {
        trace("Abc")
        knob_mc.rotation = An;
        rotation_01.gotoAndStop(A);
    }
    private function turn(e:MouseEvent):void
    {
        mc = simulator.activityAssets.spw.neddle;
        CreateList.excerciseName = "Right_Bottom_Right";
        CreateList.currentClass = "RightRotate";
        A = rotation_01.currentFrame;
        An = knob_mc.rotation;
        this.stage.addEventListener(MouseEvent.MOUSE_MOVE,turn);
        this.stage.addEventListener(MouseEvent.MOUSE_UP,endTurn);
        var position:Number = Math.atan2((mouseY - knob_mc.y),mouseX - knob_mc.x);
        //trace(position);
        angle = (position / Math.PI) * 180;
        knob_mc.rotation = angle;
        if (CreateList.stepId >= 3)
        {
            if (mc.currentFrame > 3)
            {
                mc.gotoAndStop(mc.currentFrame + 5);

            }
        }
        mainProcess();
    }

    private function endTurn(e:MouseEvent):void
    {
        rotateBool = false;
        rotation_01.gotoAndStop(rotation_01.currentFrame);
        knob_mc.removeEventListener(MouseEvent.MOUSE_DOWN,turn);
        this.stage.removeEventListener(MouseEvent.MOUSE_MOVE,turn);
        knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
        var sqChck:SeqCheck = new SeqCheck(CreateList.stepId);

    }

    private function mainProcess()
    {
        if (! rotateBool)
        {
            rotateBool = true;
            rotation_01.gotoAndPlay(rotation_01.totalFrames / 2 + rotation_01.currentFrame);
        }
    }


}

}
于 2012-03-20T12:11:10.303 に答える