• User

    assegnare comandi alla tastiera

    Carissimi amici digitali finalmente sono riuscita a mettermi in contatto con voi. Prima di rivolgervi il mio quesito, vorrei spendere una parola per congratularmi con tutti voi per la vostra bravura e professionalità.

    La mia domanda è la seguente :
    Come faccio in Fash MX a metter in relazione un comando come un pulsante dal quale deve partire un filmato, con un tasto della tastiera ?
    In pratica vorrei che si navigasse senza l'ausilio del mouse.
    So che in questo modo si costruiscono i giochi, ma anche scaricandone un esempio non avendo molta dimestichezza con actionScript non mi sono serviti a nulla.
    Quello che mi serve è riuscire a capire attraverso un semplice esempio questo meccanismo.
    Esiste fra di voi un'anima buona in grado di aiutarmi ?

    Grazie e buon fine settimana a tutti.


  • Super User

    Ciao stefy e benvenuto/a nel forum GT 🙂

    Questo codice è quello che ti serve per capire l'interattività della tastiera con Flash:

    
    var obj:Object=new Object();
    obj.onKeyDown=function():Void
    {
        trace(Key.getAscii());
    }
    Key.addListener(obj);
    
    

    Seleziona il primo frame della timeline e copiaci il codice.
    Quando lanci l'swf e premi i tasti della tastiera il comando trace ti fa vedere il codice ascii del tasto premuto.


  • User

    grazie mille ora ci provo .


  • User

    Scusa Flep, la mia ignoranza, riesco a vedere il codice del tasto premuto, che è (0) come hai detto, e ora ? cosa devo fare affinchè premendo un particolare tasto mi parta il movie che voglio ?
    Come associo il nome del movie al tasto ? Perdonami , in fatto di Flash sono un pò ignorante, cerca di non dare nulla per scontato.
    comunque è sabato sera e se non ti va di rispondermi capirò.
    Grazie ancora Stefania


  • Super User

    Ad esempio il tasto s ha codice ascii 115.
    Ora se vuoi che un'azione venga eseguita quando il tasto s è premuto:

    
    var obj:Object=new Object();
    obj.onKeyDown=function():Void
    {
        if(Key.getAscii()==115)
        {
            trace('ok');
        }
    }
    Key.addListener(obj);
    
    

    Al posto del trace puoi mettere le azioni che vuoi vengano eseguite.
    Ad esempio:

    
    var obj:Object=new Object();
    obj.onKeyDown=function():Void
    {
        if(Key.getAscii()==115)
        {
            _root.gotoAndPlay(2);
        }
    }
    Key.addListener(obj);
    
    

  • User

    Carissimo Flep ti ringrazio infinitamente per la tua gentilezza nel rispondermi anche di domenica,ora credo di avere le ideee un po più chiare.
    Però ancora non ho raggiunto il mio obbiettivo.
    Mi SPIEGO MEGLIO:

    Voglio realizzare un interfaccia con 5 o 6 filmati quik-time, ciascun filmato deve essere associato ad un tasto della tastiera che una volta premuto vada in play.
    Ho fatto una prova con le istruzioni che tu mi hai suggerito e in base a ciò che sono riuscita a capire, ho agito nel seguente modo :

    Ho creato 2 livelli, al primo frame del 1 livello ho assegnato l'azione stop.
    Nel primo frame del secondo livello ho inserito il filmato riducendo in proporsione la sua dimenzione fisica, e l'ho convertito in un pulsante nell'azione del quale ho inserito :

    on (press) {var obj:Object=new Object();
    obj.onKeyDown=function():Void
    {
    if(Key.getAscii()==115)
    {
    _root.gotoAndPlay(10);
    }
    }
    Key.addListener(obj);
    }

    Sempre nel livello 2 al frame 10 ho inseriro il filmato corrispondente in tutta la sua dimenzione.
    Quando lancio l'SWF e premo il tasto S non succede nulla riesco ad andare al frame 10 solo se premo invio, ma chiaramente non è quello che voglio.

    DOVE HO SBAGLIATO ?

    Spero che tu sia munito di tanta pazienza
    Ancora Grazie Stefania


  • Super User

    Con quel codice sposti la timeline principale al frame 10 dove hai il video.
    Prova allora a dire:
    _root.gotoAndStop(10);

    e al frame 10 devi far partire il video; ha uno stop sul primo frame questo video ?


  • User

    Ho provato a dire _root.gotoAndStop(10); ma non cambia nulla, va al frame 10 solo se premo l'invio, e per rispondere alla tua domanda SI al primo frame il video ha uno stop.


  • Super User

    stefy me ne sono accorto adesso grrrr
    quel codice non funzionerà mai perchè l'evento è onPress, cioè tu hai scritto quel codice su un bottone o una movieclip.
    Scrivi il codice senza onpress sulla timeline, esattamente come te l'ho scritto io


  • User

    Ho inserito on Press perchè altrimenti mi riportava i seguenti errori :

    Errore Scena=Scena 1, livello=Livello 3, fotogramma=1:Linea 1: L'istruzione deve apparire all'interno del gestore on
    var obj:Object=new Object();
    Errore Scena=Scena 1, livello=Livello 3, fotogramma=1:Linea 2: L'istruzione deve apparire all'interno del gestore on
    obj.onKeyDown=function():Void
    Errore Scena=Scena 1, livello=Livello 3, fotogramma=1:Linea 9: L'istruzione deve apparire all'interno del gestore on
    Key.addListener(obj);
    Totale errori ActionScript: 3 Errori segnalati: 3

    che con onPress non compagliono, ma è chiaro che a giudicare dal risultato e dalle tue informazioni non significa nulla.

    Allora sono costretta a ripeterti la domanda
    Ma allora dev'è che sbaglio ?


  • Super User

    Il publish setting è settato per actionscript 2.0 ?
    Inoltre sei sicura che scrivi il codice sulla timeline ?

    onPress non serve in questo caso, se lo metti e non ti dà errore è perchè non stai scrivendo il codice sulla timeline.

    Copia il mio codice, seleziona il primo frame della timeline e copialo 🙂


  • User

    GRAZIE Flep sei GRANDEEEEEEE...

    Ho creato un documento ex novo e ho ripetuto il procedimento, scrivendo il codice nella timeline, e ora funziona tutto correttamente.
    Però prima di congedarmi dalla tua preziosa collaborazione vorrei rivolgerti un ultima spero! domanda :

    il seguente codice, funziona su di un filmato:

    var obj:Object=new Object();
    obj.onKeyDown=function():Void
    {
    if(Key.getAscii()==115)
    {
    _root.gotoAndStop(10);
    }
    }
    Key.addListener(obj);

    si riferisce quindi ad un solo filmato che dall'interfaccia mi porta come ti ho detto ad eseguire uno stesso filmato più grande al frame 10.
    Ora per far si che la stessa operazione avvenga anche su altri filmati presenti nell'interfaccia, devo creare per ognuno un livello distinto, o posso aggiungere delle informazioni sullo stesso frame della timeline ?
    Se devo aggiungere altre info allo stesso frame come vanno inserite esattamente ?

    Ancora infinitamente grazie
    Stefania


  • Super User

    Dopo la riga
    _root.gotoAndStop(10);

    puoi assegnare altri comandi, dipende da quello che vuoi fare 🙂


  • User

    Grazie per le tue preziose informazioni
    in corso d'opera avrò sicuramente ancora bisogno di te e probabilmente tornerò a disturbarti.
    Per ora nel congratularmi con te per la tua cortese attenzione e professionalità, ti auguro Buonanotte
    Stefania


  • Super User

    Prego 🙂
    E' stato un piacere 🙂


  • User Newbie

    Ciao a tutti,
    ho un problema lievemente simile. Premetto che non so se ciò che vorrei fare è possibile. Sto costruendo un sito istituzionale in flash e mi serve introdurre come funzionalità la possibilità di ingrandire o diminuire la dimensione del testo della pagina.
    Siccome credo che in flash questo sia un po un casino ho pensato che si potesse ottenere lo stesso risultato qualora fosse possibile linkare un tasto del mio sito al comando "ctrl" + "+" della tastiera che non fa altro che dire al browser di effettuare uno zoom.
    E' possibile fare questo e come?:?

    Grazie mille!


  • Super User

    Fare lo zoomin e zoomout di un campo di testo dinamico in flash non è una impresa impossibile, crei un campo di testo dinamico al quale dai nome istanza ad esempio "sfondo", poi crei un pulsante con nome istanza "zoomin" e uno con nome istanza "zoomout", qusti i codici da mettere sui pulsanti.
    zoomin```

    onClipEvent (enterFrame) {
    //dichiara la funzione "zoom" che ingrandisce il clip "sfondo"
    if (zoom) {
    _root.sfondo._yscale += 5;
    _root.sfondo._xscale += 5;
    }
    }
    onClipEvent(mouseDown){
    //dichiara mx e my come posizione del mouse
    mx = _root._xmouse;
    my = _root._ymouse;
    //controlla che il mouse sia sul clip "zoomin"
    if(_root.zoomin.hitTest(mx,my,true)) {
    //se il pulsante si trova sul pulsante ""zoomin"
    //dichiara valida la funzione di ingrandimento "zoom"
    zoom = true;
    }
    }
    onClipEvent(mouseUp){
    //se non si tiene il mouse premuto la zoommata si ferma
    zoom = false
    }

    zoomout```
    
      onClipEvent (enterFrame) {
    //dichiara la funzione zoom2 che rimpicciolisce il clip
    if (zoom2) {
    _root.sfondo._yscale -= 5;
    _root.sfondo._xscale -= 5;
    }
    }
    onClipEvent(mouseDown){
    //dichiara mx e my come posizione del mouse
    mx = _root._xmouse;
    my = _root._ymouse;
    //controlla che il mouse sia sul clip "zoomout"
    if(_root.zoomout.hitTest(mx,my,true)) {
    //se il pulsante si trova sul pulsante ""zoomout"
    //dichiara valida la funzione di rimpicciolimento "zoom2"
    zoom2 = true;
    }
    }
    onClipEvent(mouseUp){
    zoom2 = false;
    }
    
    

  • User Newbie

    Ciao Nhatan e grazie per la risposta. Il problema è che intorno al testo c'è della grafica e il suo ingrandimento da solo mi incasinerebbe il layout della pagina!! Purtroppo il sito è già quasi pronto e non posso ricostruirlo pensando ad un ingrandimento del testo. Per questo motivo ho pensato di trovare un modo che mi ingrandisse direttamente tutte le pagine senza bisogno di doverle ricreare tutte in un formato più grande!


  • User Attivo

    Scusate, mi intrometto in questa discussione per chiedere se qualcuno sa se vi è la possibilità di intercettare otre che i tasti della tastiera anche gli assi x e y di un joystick.
    Grazie a tutti.