• Registrati
Benvenuto su codeinvaders.net la community italiana dedicata agli sviluppatori!
Puoi partecipare alle discussioni anche attraverso facebook, twitter e google+.
JS Day
  • google plus
  • facebook
  • twitter
Codeinvaders.net, domande e risposte per sviluppatori!
Partecipa a questa community rispettando tutti i suoi membri che, per il puro piacere di condividere, forniscono risposte e suggerimenti.
Classifica migliori utenti del mese 06/2017
  1. 4240 Punti

  2. 3980 Punti

  3. 3480 Punti

  4. Luca Rainone

    2400 Punti

I premi del mese
Posizione 1: Buono Amazon da 10 euro
Posizione 2: Sconto 40% su un libro O'Reilly

in flash come posso far apparire un'immagine con un clic, mentre va un'animazione?

ciao!

è possibile,mentre va la mia animazione (e in modo indipendente da questa) far apparire, con il clic del mouse, un elemento quando decido io?

mi spiego meglio...ho un animazione che si ripete ciclicamente...vorrei, in fase di esposizione della mia presentazione (quindi non è possibile stabilire a priori il momento esatto), poter far apparire un elemento, lasciando però che l'animazione prosegua indisturbata...

si può fare?

grazie mille!!!!

quesito posto 24 Giugno 2013 in actionscript da anonimo
   

4 Risposte

+1 voto

Devi fare in modo che la tua animazione sia in ascolto di un evento, nel caso specifico dell'evento MouseEvent.CLICK. A quel punto verrà chiamata una funzione handler che farà ciò che vuoi.
Per inserire un simbolo nell'animazione stessa, basterà concatenarlo ad una classe estensione di MovieClip, instanziarlo ed aggiungerlo ad un container o al filmato principale.

Ad esempio una cosa di questo tipo:

import flash.events.MouseEvent;

function init():void{
    var container:MovieClip = this;
    addEventListener(MouseEvent.CLICK, onClick);
    function onClick(event:MouseEvent):void{
        var obj_mc:Obj = new Obj();
        container.addChild(obj_mc);
    }
}

init();

Dove il container può essere il MovieClip che scegli (in questo caso il filmato principale) e dove Obj è la classe di concatenamento ActionScript per il simbolo che preferisci.

La classe Obj:

package  {
    import flash.display.MovieClip;

    public class Obj extends MovieClip {    
        public function Obj() {

        }
    }
}

Al click su uno qualsiasi degli oggetti figli del filmato principale verrà scatenato l'handler onClick (Consigliabile quindi inserire un filmato di background che non lasci spazi insensibili al click).

risposta inviata 24 Giugno 2013 da anonimo
0 voti

...ehm.....
partendo dal presupposto che è 20 giorni che ho iniziato ad usare questo programma......me lo sapresti spiegare più semplicemente??? (ti chiedo perdono....!!!)

cioè.....io cosa ci devo scrivere????

considera che il mio filmato non è un vero e proprio filmato, ma una sequenza ciclica di immagini...che va random sulla parte in alto a destra dello stage

sullo sfondo ho una mappa...sulla quale voglio evidenziare delle frecce.......che però sono scollegate dalle immagini che si susseguono in alto....
ti allego l'immagine.... spero tu riesca ad aprirla....
https://www.facebook.com/photo.php?fbid=10201601562540724&set=a.1736316367558.2103173.1228076010&type=1&theater

risposta inviata 6 Luglio 2013 da anonimo
modificato 6 Luglio 2013
0 voti

In realtà è più facile a farsi che a dirsi. :)

In base alla foto, e quindi a quello che presuppongo tu debba ottenere, la soluzione da adottare può essere più semplice. Nel senso che si tratta di un numero finito di oggetti posizionati in punti prestabiliti che è quindi conveniente preimpostare nel progetto.
Per ogni mappa puoi avere una MovieClip delle frecce contenente diversi frame con diversi livelli ognuno dei quali avrà una delle tue frecce sovrapposta o meno alle altre nella linea temporale, dipendentemente da come le vorrai visualizzare. A questo punto al click del mouse (probabilmente sulla mappa e non su qualsiasi altro oggetto) non dovrai fare altro che una chiamata a mappa_mc.frecce_mc.gotoAndStop(“nomedelframe”) o mappa_mc.frecce_mc.nextFrame().

Quindi, presupposto tu abbia diverse mappe, una volta dato il nome ad ogni istanza delle MovieClip dal pannello delle proprietà (mappai_mc) e alla MovieClip delle frecce (frecce_mc, stesso nome per tutte quelle che andrai a definire all’interno delle varie mappe), andrai a scrivere su un livello della timeline principale dedicato al codice:

mappa1_mc.addEventListener(MouseEvent.CLICK, mappaClickHandler);
mappa2_mc.addEventListener(MouseEvent.CLICK, mappaClickHandler);
mappa3_mc.addEventListener(MouseEvent.CLICK, mappaClickHandler);

function mappaClickHandler(event:MouseEvent):void{
    event.currentTarget.frecce_mc.nextFrame();
}

Ovviamente ricorda lo stop() sul primo frame di frecce_mc e inserisci il primo frame vuoto e un ultimo frame vuoto con il codice gotoAndStop(1), cosicché ti consenta di ricominciare una volta terminata la sequenza dei click.

Per scrivere poi in una forma più elegante :) ed indipendente dal numero di mappe che andrai ad inserire:

const MAPPA:String = “mappa”;
const SUFFIX:String = “_mc”;

function addListeners(container:MovieClip){
    //numChildren dovrebbe ritornarti il numero di mappe (sarebbe conveniente che il container abbia solo mappe)
    for (var i:Number = 1; i <= container.numChildren; i++){ 
        var instanceName:String = MAPPA + i.toString() + SUFFIX;
        //con hasOwnProperty(instanceName) verifichiamo che non ci siano oggetti diversi da quelli che ci aspettiamo
        //o mappe nominate nel modo sbagliato
        if (container.hasOwnProperty(instanceName)){
            //qui in sostanza è mappai_mc che si mette in ascolto dell’evento Click del mouse 
            container[instanceName].addEventListener(MouseEvent.CLICK, mappaClickHandler);
        }
    }
}

function mappaClickHandler(event:MouseEvent):void{
    //qualunque sia la mappa coinvolta, al suo interno troveremo comunque una istanza opportunamente nominata frecce_mc con le sue frecce
    event.currentTarget.frecce_mc.nextFrame();
}

addListeners(this); //dipendentemente da quale MovieClip contiene le mappe

P.S.
In risposta a Fb, puoi utilizzare rapidshare.com ad esempio :)

risposta inviata 9 Luglio 2013 da anonimo
modificato 9 Luglio 2013 da anonimo
0 voti

Per puro diletto ed andando un po' OT…

se l'ordinale identificativo delle mappe non fosse continuo e superasse il numChildren, se eliminassimo ad esempio mappa2_mc, e rimanessimo con mappa1_mc e mappa3_mc (quindi con 2 oggetti nel container), la funzione "generica" precedente non avrebbe efficacia. Possiamo ovviare con una soluzione ancora più generica:

//regular expression relativa alla nomenclatura adottata
const REGEX:RegExp = /mappa+\d+_mc/;

/**
 * Questa funzione mette in ascolto tutti gli oggetti contenuti nel container e rispondenti ad
 * un nome specificamente descritto dalla regular expression, di un eventType scelto, a seguito
 * del quale verrà richiamato l'handler impostato
 */
function addListeners(container:MovieClip, regex:RegExp, eventType:String, handler:Function){
    for (var i:Number = 0; i < container.numChildren; i++){
        var instanceName:String = checkName(container.getChildAt(i), regex);
        if (instanceName){
             container[instanceName].addEventListener(eventType, handler);
        }
    }
}


/**
 * Questa funzione ritorna il nome dell'istanza se matcha con la regular expression, oppure null
 */
function checkName(instance:DisplayObject, regex:RegExp):String{
    //meglio non fidarsi degli usi impropri dei metodi di utilità :P
    //in addListeners instance non è mai null, ma qualcun altro potrebbe utilizzare il metodo
    if (instance){
        //che qui (instance.name) solleverebbe un'eccezione
        //mentre name non è null anche se non definita nel pannello delle proprietà
        if (instance.name.match(regex)){
            return instance.name;
        }
    }
    return null;
}

function mappaClickHandler(event:MouseEvent):void
{
    bg_mc.nextFrame();
}

function mouseOverHandler(event:MouseEvent):void
{
    trace(event.currentTarget.name);
}

//in questo modo possiamo utilizzare la funzione per scopi diversi
addListeners(this, REGEX, MouseEvent.CLICK, mappaClickHandler);
addListeners(this, REGEX, MouseEvent.MOUSE_OVER, mouseOverHandler);

//o ad esempio addListeners(anotherContainer, REGEX_N, MyPersonalEvent.AKINDOFEVENT, customHandler); :)
risposta inviata 9 Luglio 2013 da anonimo
modificato 9 Luglio 2013 da anonimo
Puoi partecipare alle discussioni anche attraverso facebook e twitter.
...