Ver Mensaje Individual
  #9 (permalink)  
Antiguo 25/05/2010, 13:17
Avatar de andmai
andmai
 
Fecha de Ingreso: enero-2010
Mensajes: 84
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Evento mouse no funciona + animación durante tiempo determinado

Cita:
Iniciado por Lynxcraft Ver Mensaje
te podría ayudar pero realmente no se como lo tienes planteado por ejemplo cuando pones los eventos de gotoAndStop dentro del switch , ad donde te diriges exactamente a una animación de dado?..

por otro lado si quieres utilizar el ejemplo que te e dado te puedo añadir una función que se ejecute cada ves que el dado se detenga devolviendo el valor real del dado que seria del 1-6;

primero renombra la vinculación del dado y coloca mcDado


el .as Dado

Código PHP:


package 
{
    
import flash.display.MovieClip;
    
import flash.events.MouseEvent;
    
import flash.events.TimerEvent
    import flash
.utils.Timer
    import flash
.events.Event
    
public dynamic class Dado extends MovieClip {
        public var 
n:int=0;
        public var 
keyFrames:Array=new Array("dado1","dado2","dado3","dado4","dado5","dado6");
        public var 
mcDado:MovieClip;
        public var 
MinSegundos:Number=3;//este es el tiempo minimo de animacion del dado el tiempo maximo dependera de los frames que tenga la animacion
        
public var timerStop:Timer;
        public var 
functionEnd:Function=function(n:int):void{};
        public var 
functionEndParam:Array=new Array();
        public function 
Dado(func:Function=null,param:Array=null):void {
            
functionEnd=(func!=null)?func:functionEnd;
            
functionEndParam=(param)?param:functionEndParam;
            
mcDado=new miMcDado();//este Movie deve estar vinculado en la biblioteca y tienes que tener los keyFrames y guales a los de arriba 
            
addChild(mcDado);
            
timerStop=new Timer(1000*MinSegundos,1);
            
timerStop.addEventListener(TimerEvent.TIMER,detectStopDado);
            
mcDado.stop();
        }
        public function 
start():void {
            
initTimerStopDado();
        }
        public function 
addFunction(func:Function):void {
            
functionEnd=func;
        }
        public function 
addFunctionParam(param:Array):void {
            
functionEndParam=param;
        }
        public function 
getValor():int {
            return 
n+1;
        }
        private function 
initTimerStopDado() {
            
n=random();
            
mcDado.play();
            
timerStop.reset();
            
timerStop.start();
        }
        private function 
detectStopDado(event:TimerEvent) {
            
mcDado.addEventListener(Event.ENTER_FRAME,StopDado);
        }
        private function 
StopDado(event:Event) {
            if (
mcDado.currentFrameLabel==keyFrames[n]) {
                
mcDado.stop();
                
mcDado.removeEventListener(Event.ENTER_FRAME,StopDado);
                var 
paramTemp:Array=functionEndParam.slice()
                
paramTemp.unshift(getValor());
                
functionEnd.apply(functionEnd,paramTemp)
            }
        }
        private function 
random():int {
            return (
Math.round(Math.random()*5)==Math.round(Math.random()*5))?Math.round(Math.random()*5):Math.round(Math.random()*5);
        }

    }

y estos son uno ejemplos de como aplicarlo

Código PHP:
import Dado
var dado=new Dado(resultado,['Hola Mundo']);
addChild(dado);
dado.x=(stage.stageWidth)/2
dado
.y=(stage.stageHeight)/2
dado
.start()
function 
resultado(n:int,param:String):void{
    
trace("El resutado del dado es:"+n+" \n El valor del parametro es:"+param

con dos dados

Código PHP:
import Dado
var dado=new Dado(resultado,['Hola Mundo']);
addChild(dado);
dado.x=100
dado
.y=100
dado
.start()
var 
dado2=new Dado(resultado,['Hola Mundo']);
addChild(dado2);
dado2.x=200
dado2
.y=100
dado2
.start()
function 
resultado(n:int,param:String):void{
    
trace("El resutado del dado es:"+n+" \n El valor del parametro es:"+param

si quieres hacer click sobre un dado

Código PHP:
import Dado
var dado=new Dado(resultadoDado1,['soy el paramatro1']);
addChild(dado);
dado.x=100
dado
.y=100
dado
.addEventListener(MouseEvent.CLICK,mouseClik)
function 
mouseClik(event:MouseEvent):void{
    
dado.start()
}
function 
resultadoDado1(n:int,param):void{
    
trace("El resutado del dado1 es:"+n+"\nEsto es el valor del Parametro actual:"+param

si quieres que dada dado ejecute una funcion distinta

Código PHP:
import Dado
var dado=new Dado(resultadoDado1);
addChild(dado);
dado.x=100
dado
.y=100

var dado2=new Dado(resultadoDado2);
addChild(dado2);
dado2.x=200
dado2
.y=100
addEventListener
(MouseEvent.CLICK,mouseClik)
function 
mouseClik(event:MouseEvent):void{
    
dado.start()
    
dado2.start()
}
function 
resultadoDado1(n:int):void{
    
trace("El resutado del dado1 es:"+n
}
function 
resultadoDado2(n:int):void{
    
trace("El resutado del dado2 es:"+n

si quieres cambiar de parametros cada ves que se ejecute la funcion

Código PHP:
import Dado
var dado=new Dado(resultadoDado1,['soy el paramatro1']);
addChild(dado);
dado.x=100
dado
.y=100
addEventListener
(MouseEvent.CLICK,mouseClik)
function 
mouseClik(event:MouseEvent):void{
    
dado.start()
}
function 
resultadoDado1(n:int,param):void{
    
trace("El resutado del dado1 es:"+n+"\nEsto es el valor del Parametro actual:"+param
    
dado.addFunctionParam(['soy el nuevo parametro con el nuevo resultado '+n])

y por ultimo si quieres cambiar de funcion cada ves que te entregue el resultado

Código PHP:
import Dado
var cuenta:int=0
var dado=new Dado(funcion1);
addChild(dado);
dado.x=100
dado
.y=100
addEventListener
(MouseEvent.CLICK,mouseClik)
function 
mouseClik(event:MouseEvent):void{
    
dado.start()
}
function 
funcion1(n:int):void{
    
trace("soy la funcion1 y el resultado del dado es:"+n
    
dado.addFunction(funcion2)
}
function 
funcion2(n:int):void{
    
trace("soy la funcion2 y el resultado del dado es:"+n
    
dado.addFunction(funcion1)

existen mas combinaciones pero eso te dejo a ti XDXD bueno espero que esto te sirva saludos



Muchas gracias una vez más por tu ayuda Lynxcraft pero tu solución me resulta muy complicada. Yo quería hacerlo de una manera más sencilla(tal y como explico en el post anterior), aunque quizá esté intentando un imposible(soy bastante novata en este lenguaje).


Si alguien me pudiese decir porque no funciona cuando se hace click sobre el dado, es decir porque no funciona el evento, le estaría eternamente agradecida
ya que es lo que mas me preocupa. El tema de alargar la animación es secundario.


Muchas muchas gracias a tod@s y sobre todo a ti Lynxcraft.