Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39

    Non si aggiornano le dimensioni dei mc ridimensionati

    salve,
    ho creato sullo stage un mc consistente in un rettangolo di 100x100 px a cui ho dato nome istanza "square" e poi ho messo sul primo frame il seguente codice:



    codice:
    trace ("prima  del ridimensionamento="+square.width,square.height);
    
    square.addEventListener(Event.ENTER_FRAME, ridimensiona);
    
    function ridimensiona (evento:Event):void{
    
    square.width = 50
    square.height = 50
    }
    
    trace ("dopo il ridimensionamento="+square.width,square.height);
    come mai le dimensioni del mc rimangono sempre uguali (come si evince dai 2 trace) anche se sullo stage vedo che il mc è stato ridimensionato?
    E come si fa avendo del codice come questo ad aggiornare i valori di width ed height per usarli nel codice successivo?

    Ciao!

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    L'evento ENTER_FRAME si verifica a seconda di come è impostato il frameRate del filmato nelle proprietà dello stage o da codice ActionScript.

    Quindi se il tuo filmato è impostato a 24 FPS anche se sei fermo su un fotogramma questo viene letto 24 volte al secondo ma nella tua funzione non viene eseguito nessun calcolo per diminuire o aumentare i valori width e height di 'square'.

    Se vuoi che da 100 x 100 diventi 50 x 50 diminuendo gradualmente a ogni ENTER_FRAME fai così:

    Codice PHP:
    trace("prima  del ridimensionamento="+square.width,square.height); // 100 100

    square.addEventListener(Event.ENTER_FRAMEridimensiona);

    function 
    ridimensiona(evento:Event):void
    {
        
    square.width -=  1;
        
    square.height -=  1;
        
        if (
    square.width <= 50 && square.height <= 50)
        {
            
    square.removeEventListener(Event.ENTER_FRAMEridimensiona);
            
    trace("dopo il ridimensionamento="+square.width,square.height); // 50 50
        
    }

    La condizione if rimuove il Listener sull'evento ENTER_FRAME quando 'square' è minore o uguale a 50 x 50.




    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    ciao
    non mi serve che diminuisca gradualmente, l'importante è che assuma quelle dimensioni.
    Ho notato però che se metto il trace a seguire fuori dalla funzione, segna ancora i vecchi valori.

    Supponiamo che io voglia fare un bordo attorno al quadrato ridimensionato aggiungendo a seguire il seguente codice:

    codice:
    graphics.lineStyle(10,0x000000);
    
    graphics.moveTo(square.x,square.y);
    graphics.lineTo(square.x+square.width,square.y);
    graphics.lineTo(square.x+square.width,square.y+square.height);
    graphics.lineTo(square.x,square.y+square.height);
    graphics.lineTo(square.x,square.y)
    affinchè funzioni correttamente devo mettere questo codice per forza su un altro frame?

    Non capisco perchè l'enter_frame anche se viene letto 24 volte al secondo alla fine non assegni il nuovo valore, mi sfugge qualcosa

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Si che assegna il nuovo valore, il trace lo devi mettere dntro la funzione e rimuovere l'ENTER_FRAME
    codice:
    square.addEventListener(Event.ENTER_FRAME, ridimensiona);
    
    function ridimensiona (evento:Event):void{
    
    square.width = 50
    square.height = 50
    trace(square.width)
    if(square.width == 50)
    {square.removeEventListener(Event.ENTER_FRAME, ridimensiona)};
    }
    Anche se non riesco a cogliere il motivo di fare un ENTER_FRAME per un ridimensionamento istantaneo.

  5. #5
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Originariamente inviato da gandall
    Non capisco perchè l'enter_frame anche se viene letto 24 volte al secondo alla fine non assegni il nuovo valore, mi sfugge qualcosa
    Il nuovo valore di square.width e square.height viene assegnato anche se non lo metti in una funzione ENTER_FRAME e lo vedi direttamente sullo stage con le ultime dimensioni assegnate in ordine cronologico.

    Se il tuo MC 'square' è sullo stage con le dimensioni di 100 x 100 e scrivi:

    Codice PHP:
    square.width 90;
    square.height 90;

    square.width 80;
    square.height 80;

    square.width 50;
    square.height 50
    Quello che vedrai sullo stage sarà un MC di 50 x 50 ovvero le dimensioni che gli hai assegnato alla fine del codice perchè il tutto viene letto in una frazione di secondo.
    Non vedi variazioni nei tuoi trace perchè tra il trace iniziale e quello finale non passa nemmeno il tempo di un ENTER_FRAME anche se ce ne sono 24 in 1 secondo.

    Fai così e vedi che il trace ti restituisce il valore esatto:

    Codice PHP:
    trace("prima  del ridimensionamento="+square.width,square.height); // 100 100 

    square.width 90;
    square.height 90;

    square.width 80;
    square.height 80;

    square.width 50;
    square.height 50;

    trace("dopo il ridimensionamento="+square.width,square.height); // 50 50 
    Il tuo codice per fare il bordo lo puoi mettere subito dopo il ridimensionamento del clip senza necessariamente usare l' ENTER_FRAME
    dato che questo scatta comunque anche senza mettere un Listener che monitorizza l'evento:

    Codice PHP:
    square.width 50
    square
    .height 50

    graphics
    .lineStyle(10,0x000000);
    graphics.moveTo(square.x,square.y);
    graphics.lineTo(square.x+square.width,square.y);
    graphics.lineTo(square.x+square.width,square.y+square.height);
    graphics.lineTo(square.x,square.y+square.height);
    graphics.lineTo(square.x,square.y


    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    Originariamente inviato da Sleter

    Il tuo codice per fare il bordo lo puoi mettere subito dopo il ridimensionamento del clip senza necessariamente usare l' ENTER_FRAME
    dato che questo scatta comunque anche senza mettere un Listener che monitorizza l'evento:
    questo è chiaro, il problema era aggiornare il bordo con la presenza di ENTER_FRAME.
    Avevo fatto un esemoio una volta con un mc che si doveva ridimensionare con lo stage, laciando un bordo sempre uguale, un cosa del tipo

    codice:
    
    stage.addEventListener(Event.RESIZE, ridimensiona);
    stage.dispatchEvent(new Event(Event.RESIZE));
    
    
    function ridimensiona (evento:Event):void{
    	
    square.addEventListener(Event.ENTER_FRAME, onEnter);
    function onEnter(evt:Event):void {
    
    	
    	
    	    square.width = stage.stageWidth - 100;
            square.height = stage.stageHeight - 100;
    		
    	}
    vediamo se riesco a trovare l'esempio completo, comunque se in questo caso volessi aggiungere il bordo (che si ridimensioni assieme a square) dovrei per forza inglobarlo dentro la funzione?


    ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    39
    In altre parole, è possibile aggiornare le misure del bordo dopo che finisce l'evento ENTER_FRAME di resize o il codice di costruzione del bordo deve essere contemporaneo al resize del mc e quindi inserito dentro la funzione? (escludiamo ovviamente la soluzione di mettere il codice del bordo in un frame successivo)

    Spero di essermi spiegato, ciao!

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.