2009-05-11 3 views
0

У меня есть проект Flash AS3, который загружает внешние SWF и управляет ими по-разному. В некоторых загруженных SWF-файлах есть кнопка «Следующий выбор», которая приведет вас к новой презентации. На моем основном внешне загруженном SWF, у меня есть код:AS3 - Dispatch Event Issue

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

который автоматически перейти к следующему выбору в наборе. Этот код работает точно так, как я хочу.

В следующем загруженном SWF, вместо того, чтобы иметь тайм-аут, пользователь просматривает все, где в конце всех временных линий есть кнопка, которая говорит следующий выбор. Поэтому я добавил следующий код там:

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

По какой-то причине, это событие никогда не делает его в файл, который загружал в SWF. Я уверен, что добираюсь до события click, потому что получаю трассировку, но событие никогда не заканчивается, хотя кажется, что это должно быть то же самое поведение, что и таймаут. Что мне здесь не хватает? Почему этот код будет отличаться от нажатия кнопки, чем от таймаута?

Благодаря

ответ

3

Вы правы в том, что они должны функционировать то же самое, что оставляет гигантский вопрос о том, что еще происходит в приложении. Кажется, хотя проблема здесь не здесь, а где-то еще.

Ненавижу, чтобы задать такой вопрос, но вы уверены, что событие уволено из корневого экранного объекта? Если вы не стреляете оттуда, вы не услышите его снаружи.

Извините, но я не могу дать вам больше, не видя более актуального кода или не зная больше о ситуации (-ях).

Тайлер.

+0

Спасибо, вы ответили на мой вопрос. Событие не уволилось из корня, что вызывало проблему. –

1

Я думаю, вы установили атрибут bubbles в false. Это позволит предотвратить событие от бурлит дальше, чем контейнер он находится в

Попробуйте вместо этого:.

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

Кроме того, в отношении организации, я бы сделать PresentationEvent класс и имеет SKIP_PREVIOUS и SKIP_NEXT события константы на них. Это больше согласуется с моделью событий, которую использует ActionScript, и сокращает избыточность. Таким образом, вы можете передать текущую презентацию и другие удобные данные, связанные с презентацией, как часть события.

+0

Он прав по обоим пунктам. Вам нужно установить для пузырьков значение true, чтобы оно отображалось в списке отображения. Или отправьте его из корня SWF. Наличие пузырька предпочтительнее, так как имеет пользовательские события. –

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); 
     } 
    } 


} 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^