studio programacion obtener móviles elemento div desde desarrollo curso con clase cambiar aplicaciones agregar acceder flash actionscript-3 events class dispatchevent

flash - programacion - ¿Cómo llamar a una función en una clase de otra clase?



manual de programacion android pdf (3)

Actualización: título modificado para reflejar mejor mi pregunta

Hola a todos :)

Mi pregunta de hoy gira en torno a un CustomEvent que intento enviar de una subclase a otra.

He utilizado mi clase CustomEvent para pasar un evento de una clase secundaria a mi clase principal, pero no estoy seguro de quién hacer eso entre las clases secundarias.

Mi clase de evento personalizado

package src.events { import flash.events.Event; public class CustomEvent extends Event { public static const CHANGE:String="onChange"; public static const COMPLETE:String="onComplete"; public static const IMAGE_LOADED:String="onImageLoaded"; public static const SWF_LOADED:String="onSWFLoaded"; public static const SWF_UNLOAD:String="onSWFUnload"; public static const CLICK:String="onClick"; public static const PAUSE_MOVIE:String="onPause"; public static const INTRO_CLICKED:String="introClicked"; public var params:Object; public function CustomEvent(type:String, params:Object, bubbles:Boolean = false, cancelable:Boolean = false) { super(type, bubbles, cancelable); this.params=params; } public override function clone():Event { return new CustomEvent(type, this.params, bubbles, cancelable); } public override function toString():String { return formatToString("CustomEvent","params","type","bubbles","cancelable"); } }

Sub Clase INTRO - despacha evento

package src.display { import gs.easing.*; import gs.TweenLite; import flash.text.*; import flash.events.*; import flash.display.*; import flash.geom.Matrix; import flash.geom.ColorTransform; // ☼ ----------------------------------------- Imported Custom Classes import src.events.CustomEvent; // ☼ ----------------------------------------- Intro Class public class Intro extends Sprite { private var playBtn:MovieClip; // ☼ ----------------------------------------- Constructor public function Intro():void { this.addEventListener(Event.ADDED_TO_STAGE, init); } // ☼ ----------------------------------------- Init public function init(event:Event):void { draw(); } public function draw():void { playBtn = new PlayThumb; playBtn.buttonMode = true; playBtn.x = 582; playBtn.y = 259; playBtn.alpha = 1; addChild(playBtn); playBtn.addEventListener(MouseEvent.MOUSE_UP, clicked); } private function clicked(e:MouseEvent):void { trace("clicked big play"); dispatchEvent (new CustomEvent(CustomEvent.INTRO_CLICKED, {})); trace("event = "+CustomEvent.INTRO_CLICKED); } }

Navegación de Sub Clase - donde estoy escuchando el evento Necesito llamar a esta función dentro de la clase de Navegación:

function introPlayButtonClick(e:CustomEvent):void { trace("introPlayButtonClick called"); TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut}); TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut}); TweenLite.to(introTab, 1, {y:60, ease:Strong.easeOut}); TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut}); $btn1 = true; $btn2 = false; trace("introPlayButtonClick called --- end"); }

Ok, entonces creo que mi problema radica en la clase de navegación, ¿cómo agrego correctamente addEventListener aquí? No obtengo ninguno de los rastros en mi función introPlayButtonClick.

Cómo funcionaba en mi clase principal con el evento PAUSE_MOVIE, me adjuntaron el eventListener a la clase de navegación a través del nombre de la variable nv:

nv.addEventListener("onPause", pauseMovie); // Inside of MAIN class

Pero dado que estoy agregando el detector de eventos dentro de la clase de Navegación para el evento INTRO_CLICKED, pensé que todo lo que necesitaba era (esto.) Agregado, pero hasta ahora no estoy logrando que ese evento se dispare.

Alguna idea, consejos, pensamientos?


Utilicé var. Estáticas públicas para poder hacer referencia a la clase en la que estaba tratando de invocar directamente una función, en lugar de utilizar distribuidores de eventos.

Primera parte: clase de navegación

public class Navigation extends MovieClip { private var // where I put many private vars private var intro:Intro; public var // where I put many public vars public static var instance:Navigation; // ☼ --------------------------------- Constructor public function Navigation():void { instance = this; //<- so I can reference this Class from another //other code

Acción del botón de clase de introducción :

private function clicked(e:MouseEvent):void { trace("clicked play -> launch function in Navigation"); Navigation.instance.introPlayButtonClick(); //Class targeted }

Ahora puedo desde dentro de la clase de introducción , llamar a esta función en mi clase de navegación :

public function introPlayButtonClick():void { TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut}); TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut}); TweenLite.to(introTab, 1, {y:60, ease:Strong.easeOut}); TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut}); $btn1 = true; $btn2 = false; }


los oyentes están conectados a una instancia de la clase que distribuye un evento dado, por lo que para escuchar el evento desde un objeto de introducción dentro de una instancia de la clase de navegación, necesitas ''addEventListener'' para ese objeto de introducción, lo que significa que necesitas una referencia a una instancia de la clase de introducción para adjuntar.

Al no saber lo suficiente sobre su configuración para dar una respuesta más detallada, aquí hay un pequeño ejemplo ilustrativo de la idea general:

public class Navigation extends WhateverClassYourSubClassing { public var intro:Intro; public function attachListenerForIntro(introToCheckForClick:Intro){ intro = introToCheckForClick; intro.addEventListener("onIntro", introPlayButtonClick); } public function introPlayButtonClick(e:CustomEvent):void { trace("introPlayButtonClick called"); TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut}); TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut}); TweenLite.to(tabNum1, 1, {y:60, ease:Strong.easeOut}); TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut}); $btn1 = true; $btn2 = false; trace("introPlayButtonClick called --- end"); intro.removeEventListener("onIntro", introPlayButtonClick); } }

EDITAR: ejemplo actualizado basado en comentarios:

Por lo tanto, debe conectar el detector de eventos AL OBJETO INTRO que apunta a la función del controlador de eventos EN EL OBJETO DE NAVEGACIÓN. entonces, si tiene una referencia a ambos en su clase principal, haga algo como esto:

var navigator:Navigator; var intro:Intro; intro.addEventListener("onIntro", navigator.introPlayButtonClick);

Por lo tanto, desde la clase de navegación, debe hacer referencia a la clase de introducción para adjuntar el detector de eventos, que es el punto de la función attachListenerForIntro. Por lo tanto, desde su clase principal, supongo que tiene una referencia a la introducción, así como a las instancias de navegación. si en la clase principal tenías algo así como var nv: navegación; var intr: introducción;