Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Error #1034: Assegnazione di tipo forzata non riuscita

    Sto cercando di creare una gallery con delle foto che posso spostare a mio piacimento e ruotarle nel caso si clicchi sulla cornice.

    Ma quando mando in esecuzione l'swf, nel momento in cui dovrebbe partire la procedura di rotazione, questo è il messaggio d'errore che mi viene riportato:

    TypeError: Error #1034: Assegnazione di tipo forzata non riuscita: impossibile convertire flash.events::Event@3b3c2e99 in flash.events.MouseEvent.

    Ho come la sensazione che sbaglio a passare l'evento alla funzione... che ne dite?

    http://www.mediafire.com/download.php?yr5f9t8ma50xb0n

    Preciso che la funzione di rotazione al momento è attiva unicamente sul lato sinistro della cornice


    var distanzaX:Number;
    var distanzaY:Number;
    var radianti:Number;
    var sup:Number;
    var sup2:Number;


    stage.addEventListener(MouseEvent.MOUSE_DOWN, drag)


    function drag(event:MouseEvent): void
    {
    distanzaX=mouseX-event.target.x;
    distanzaY=mouseY-event.target.y;
    if (distanzaX < -68)
    {
    radianti=Math.atan2(distanzaY,distanzaX);
    sup=(radianti/Math.PI)*180;
    sup2=event.target.rotation;
    event.target.addEventListener(Event.ENTER_FRAME, ruota)
    }
    else
    {event.target.startDrag()}
    }


    stage.addEventListener(MouseEvent.MOUSE_UP, stopdrag)


    function stopdrag(event:MouseEvent): void
    {event.target.stopDrag()}



    function ruota(event:MouseEvent):void
    {
    distanzaX=mouseX-event.target.x;
    distanzaY=mouseY-event.target.y;
    radianti=Math.atan2(distanzaY,distanzaX);
    event.target.rotation=(radianti/Math.PI)*180-sup+sup2;
    }

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    L'errore è sulla funzione "ruota", hai scritto MouseEvent al posto di Event.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ma in pratica tra le parentesi devo mettere quello che "scatena" l'avvio della funzione?

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Esatto, nel tuo caso è Event.ENTERFRAME, quindi tra parentesi avrai un Event e non un MouseEvent.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Originariamente inviato da and80
    Esatto, nel tuo caso è Event.ENTERFRAME, quindi tra parentesi avrai un Event e non un MouseEvent.
    però scusa, non per mettere in dubbio quanto dici perchè difatti funziona l'sfw, ma per capire come funziona as3, enterframe è contenuto in un mouseevent, quindi alla funzione non dovrei anche passare quest'ultimo sopratutto considerando che l'event.target è associato ad esso?

    Poi avrei un'altra domanda: posso assegnare l'event.target ad una variabile?
    perchè allo stato attuale il mio codice ha un problema
    http://digilander.libero.it/American_horizon/galler.swf

    se provi a ruotare l'immagine, vedrai che se il MOUSE_UP avviene fuori dalla foto, ovvero sullo stage, la foto nn smette di ruotare, questo perchè il MOUSE_UP fa ormai riferimento allo stage come event.target difatti se lo eseguo in flash mi riporta un errore nel pannello Output

    Ovvio che se usassi i nomi delle istanze sarebbe tutto più semplice, ma sto cercando di mantenermi più generico possibile usando appunto gli event.target per facilitare la gestione del progetto.

    codice aggiornato:

    codice:
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    var distanzaX:Number;
    var	distanzaY:Number;
    var radianti:Number;
    var sup:Number;
    var sup2:Number;
    var bordo:Number=50
    
    stage.addEventListener(MouseEvent.MOUSE_DOWN, drag)
    
    function drag(event:MouseEvent): void
     {          
       distanzaX=mouseX-event.target.x;
       distanzaY=mouseY-event.target.y;
       radianti=Math.atan2(distanzaY,distanzaX);
       if  ((distanzaX > -bordo) && (distanzaX < bordo) && (distanzaY > -bordo) && (distanzaY < bordo)) //se si preme al centro della foto allora parte lo spostamento
    	 {event.target.startDrag()
    	 {event.target.startDrag()
    	  event.target.addEventListener(MouseEvent.MOUSE_UP, stopdrag)
    	 }
    	   
        else  //altrimenti parte la rotazione
    	   {radianti=Math.atan2(distanzaY,distanzaX);
           sup=(radianti/Math.PI)*180;
    	   sup2=event.target.rotation;
           event.target.addEventListener(Event.ENTER_FRAME, ruota)}
      }
    
    
    
    
    
    function stopdrag(event:MouseEvent): void
     {event.target.stopDrag()
       event.target.removeEventListener(Event.ENTER_FRAME, ruota)}
      
     
    
    //--------------------------------------------------------------------------------
    function ruota(event:Event):void
    		{
    			distanzaX=mouseX-event.target.x;
    			distanzaY=mouseY-event.target.y;
    			radianti=Math.atan2(distanzaY,distanzaX);
    			event.target.rotation=(radianti/Math.PI)*180-sup+sup2;
    			stage.addEventListener(MouseEvent.MOUSE_UP, stopdrag)
    		}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.