Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42

    Usare suoni da libreria con AS3.

    Ho importato un suono wav, poi dal pannello libreria > click col destro sull' oggeto > Properties > Linkage > Class: so1, Base Class: flash.media.Sound
    codice:
    function suona():void {
    						var soundClip:Sound = new so1();
    						var sndChannel:SoundChannel = new SoundChannel();
    						sndChannel = soundClip.play();
    						}
    bottone_btn.addEventListener(MouseEvent.CLICK, suona);
    .

    Cliccando suol bottone non suona e l' Adobe Flash Player restituisce:
    codice:
    ArgumentError: Error #1063: Incongruenza nel conteggio degli argomenti su contr_fla::MainTimeline/suona(). Era atteso 0, è stato ricevuto 1.
    .

  2. #2
    function suona(e:MouseEvent):void
    {
    // azioni
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Ho risolto con:
    codice:
    var sou:Sound = new so1();
    sou.play();
    .

    Ora ho un' altro prob:
    codice:
    function playNot(intPas:int):void {
    						var inter:String = "so" + intPas + "()";
    						var sou:Sound = new inter;
    						sou.play();
    						}
    bottone_btn.addEventListener(MouseEvent.CLICK, playNot(4));
    il debugger in fase di esportazione:
    codice:
    1180: Call to a possibly undefined method inter. var sou:Sound = new inter;
    1067: Implicit coercion of a value of type void to an unrelated type Function. bottone_btn.addEventListener(MouseEvent.CLICK, playNot(4));
    .

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Fai un errore di base che non c'entra con le azioni che vuoi compiere, quanto con il metodo che usi per compierle.
    Le funzioni associate agli eventi devono essere scritte in un certo modo, devono accettare un solo parametro che equivale all'oggetto evento che viene scatenato

    codice:
    function nome_funzione (nome_parametro:TipoDiEvento):void {
        // azioni
    }
    Ad esempio:
    Codice PHP:
    function clicca (evt:MouseEvent):void {
        
    // azioni

    Ti consiglio di leggere la guida di base di AS3 presente in questo sito, in particolare il quarto capitolo: http://flash.html.it/guide/leggi/111...ipt-3-di-base/

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Avevo già letto quella guida e altre, non mi sembra che esse trattino il mio prob. Stai dicendo che una funzione nel momento in cui viene dichiarata (con function nomefunzione) pregiudica già la forma di chiamata futura? Come è possibile? Mi sembra una cosa insensata non dovrebbe essere indipendente e richiamabile in qualsiasi momento/modo? Per "nome_parametro" intendi un' argomento della funzione?

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Nella guida è spiegata la gestione dei "listener" che è quella che interessa a te in questo caso.
    Una funzione la puoi dichiarare un po' come vuoi salvo nel caso che tu la voglia utilizzare come azione da eseguire quando viene richiamato l'evento associato al listener, in quel caso dovresti fare come ti dice la guida in linea (tasto F1), altrimenti otterrai degli errori e il tuo codice non funzionerà.
    Nei due casi in cui hai avuto un errore hai sbagliato la prima volta non inserendo nessun parametro nella funzione e nel secondo inserendo il richiamo di una funzione (e non il suo nome) come secondo parametro nel metodo addEventListener che, come da guida in linea, accetta due parametri, il primo di tipo String e il secondo di tipo Function (sostanzialmente il nome della funzione, senza le parentesi o parametri opzionali).
    Mettiamo comunque il caso che tu per esigenze tue voglia scrivere una funzione un po' come ti pare, nessuno ti vieta di eseguirla all'interno della funzione che assocerai al listener, che però dovrà essere scritta secondo le regole di sintassi.

    Codice PHP:
    function quelloCheTiPare () {
        
    // azioni che vuoi
    }
    function 
    clickSulPulsante (evt:MouseEvent):void {
        
    quelloCheTiPare ();
    }
    bottone.addEventListener(MouseEvent.CLICKclickSulPulsante); 

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Non ho capito, perchè definire clickSulPulsante per usare quelloCheTiPare? Due funzioni per usarne una? Bisogna fare per forza così? Poi come faccio a passare un' argomento a quelloCheTiPare?

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    No, non bisogna fare per forza così, è solo un esempio per farti capire che una funzione la puoi definire come vuoi, ma se ti serve una funzione da usare per gestire un evento, devi scriverla con il parametro obbligatorio.

    Per gestire parametri "secondari" all'interno della funzione puoi utilizzare più di un modo, generalmente legato all'oggetto che richiama l'evento. Il parametro che passi alla funzione contiene al proprio interno una serie di proprietà che puoi sfruttare anche per gestire al meglio quello che dovrebbe fare il codice a seconda ad esempio del pulsante che premi.

    Codice PHP:
    function clicca (evt:MouseEvent):void {
        if (
    evt.currentTarget == pulsante1) {
            
    // esegui azioni legate al pulsante1
        
    } else {
            
    // esegui azioni legate al pulsante2
        
    }
    }
    pulsante1.addEventListener(MouseEvent.CLICKclicca);
    pulsante2.addEventListener(MouseEvent.CLICKclicca); 

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Qualcosa ho capito. Praticamente quell' evt è un' oggetto simile ad un' array che contiene info riguardo all' evento eseguito. Io dovrei creare una funzione nell' swf che richiamata dall' html con Javascript passandogli un argomento faccia determinate cose:
    codice:
    document.getElementById('idDellObject').nomeFunz(argomento);
    Non dovrebbe servirmi in teoria l' evt, l' unico mio prob è che non riesco a definire la funzione che accetti quell' argomento. Come si fà?

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Diciamo di sì, l'evt corrisponde all'istanza di classe che gli passi, nei nostri esempi abbiamo usato sempre MouseEvent, se andiamo a vedere nella guida, troviamo una serie di proprietà che possiamo sfruttare all'interno della funzione attraverso il parametro passato, tra cui troviamo anche (ereditate) le proprietà target e currentTarget che forniscono in pratica l'oggetto che compie l'azione sotto forma di proprietà (utile quando la stessa funzione viene eseguita da più pulsanti, vedi esempio nel mio post precedente) e che possiamo appunto usare per passare dei parametri.
    Un esempio concreto lo possiamo fare in base a quello che dicevi, passando un argomento diverso a seconda del pulsante cliccato, alla funzione javascript (mi limiterò a usare un trace, giusto per capire).

    Codice PHP:
    // sfrutto le proprietà "name" dei pulsanti, che di solito non hanno grande utilità
    pulsante1.name "pippo";
    pulsante2.name "pluto";
    pulsante1.addEventListener(MouseEvent.CLICKclickHandler);
    pulsante2.addEventListener(MouseEvent.CLICKclickHandler);
    function 
    clickHandler (evt:MouseEvent):void {
        
    trace(evt.currentTarget.name);

    Nell'esempio, se clicco "pulsante1" otterrò nel trace "pippo", altrimenti otterrò "pluto".

    Puoi sfruttare questo approccio per gestire la tua condizione e fare in modo che ogni pulsante compia l'azione che ti aspetti.

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.