Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100

    Errore con addChild e RemoveChild

    Ciao a tutti,
    vado per gradi e vi spiego il mio nuovo problema:
    sto creando un "giochino" dove viene selezionato un suono e quattro immagini a caso da un set e l'utente deve indicarmi a quale immagine corrisponde il suono. Il tutto si ripete per circa 20 volte fino a quando sono finiti i suoni da cui pescare. L'utente ha due possibilità per dare la risposta giusta: se sbaglia, dopo una pagina di feedback viene riportato al compito dove ci sarà lo stesso suono di prima e le stesse immagini disposte però in un ordine diverso.

    per fare ciò in un fotogramma ho scritto un codice dove se il tentativo è uguale a 1 dopo essere stato selezionato casualmente un sono e quattro immagini queste vengono incollate nello stage tramite il comando
    var puls1 = addChild(elemento a caso di un array) che è sempre quello con la risposta corretta
    var puls2 = addChild(elemento a caso di un array)
    var puls3 = addChild(elemento a caso di un array)
    var puls4 = addChild(elemento a caso di un array)

    questi vengono incollati in posizioni casuali (tra quattro stabilite a priori) dello stage tramite gli appositi comandi (.x .y)

    dopo, tramite degli addEventListener associo delle azioni alla pressione di ognuno di questi pulsanti (riconoscere se la risposta è giusta e indirizzare di conseguenza al feedback corretto)

    Nel fotogramma contenente il feedback inserisco i comandi:
    removeChild(puls1)
    removeChild(puls2)
    removeChild(puls3)
    removeChild(puls4)
    per eliminare le immagini onde evitare che si accavallino una sopra l'altra.

    Se la risposta è corretta si rimanda allo stesso fotogramma (senza quindi ripeterlo 20 volte sulla timeline) quindi il codice si ripete.

    Le prime volte sembrerebbe anche funzionare ma ecco il mio problema:
    dopo un numero non fisso di volte anche se premo la risposta giusta (il famoso puls1) viene eseguita una delle operazioni che dovrebbero essere eseguite solo se premessi uno degli altri pulsanti (puls2 ...)
    ad esempio si sente il rumore del feedback di errore che ho scritto nell'eventListener del puls2 ma mi manda al fotogramma del feedback corretto che invece è scritto solo nell' eventListener del puls1...

    In sostanza credo che sia come se il removeChild in realtà non funzionasse e quindi dopo un po' gli addChild si sommassero uno sopra l'altro creando un mistone pazzesco...
    è possibile?
    mi sono spiegato?
    come è spiegabile e come posso risolvere la cosa?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100
    ...per provare ad essere più preciso...

    dopo prove e prove e prove e prove mi sembra di poter dire che sembra ci siano difficoltà ad aggiornare di volta in volta la variabile che contiene l'addChild di ogni oggetto.
    Nel senso che se alla prima prova gli oggetti selezionati casualmente e incollati con addChild alle quattro variabili sono:
    puls1 = ape,
    puls2 = zanzara,
    puls3 = mucca,
    puls4 = topo

    e ad una prova successiva le stesse quattro variabili ricevono un addChild di questi quattro oggetti in questo modo
    puls1 = topo,
    puls2 = leone,
    puls3 = tigre,
    puls4 = capra,

    sembra generarsi un conflitto tra quello che era prima e quello che è dopo e quindi esegue le funzioni sia se la risposta è giusta sia sbagliata.

    Nel caso specifico qui esemplificato la variabile puls4 nella prima prova con addChild corrispondeva ad un topo (risposta errata) e nella prova successiva è invece la variabile puls1 a corrispondere al topo (quella corretta) quindi si genera un conflitto e mi manda un po' in palla le cose.

    Tutto ciò nonostante abbia inserito precedentemente un removeChild e provato anche ad assegnare alle variabili un valore null prima di fare un nuovo addChild...

    soluzioni?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Pochi elementi, la situazione non è chiara difficile così trovare soluzioni.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100
    effettivamente mi scuso ma è difficile da spiegare...
    credo che la situazione possa essere riassunta così:

    io scrivo:
    var puls1 = addChild(es.topo)
    var puls2 = addChild(es.mucca)
    var puls3 = addChild(es.cane)

    a ognuno di questi pulsanti è associato un evento: facciamo finta la riproduzione di un suono di feedback ad esempio "giusto" (per il puls1) e sbagliato (per gli altri) con questo codice:
    puls1.addEventListener(.....) e così via per gli altri

    dopo una prima prova nuovamente scrivo:
    var puls1 = addChild(es.cane) ---> che ora è risposta giusta ma prima no
    var puls2 = addChild(es.lupo)
    ...

    quando premo sul puls1 in questo secondo caso, mi esegue sia il suono giusto (essendo la risposta giusta in questa prova) sia il suono di errore (perchè evidentemente in una prova successiva era un errore)

    mi chiedo quindi se (anche se ho messo il removeChild) non si crei un conflitto se alla stessa variabile (puls...) do in due momenti distinti due valori addChild diversi

    spero sia un po' più chiaro ora...

    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Devi postare il codice, var puls1=addChild...ecc non mi sembra corretto puls1 o è l'istanza di un pulsante o è una variabile, se è una variabile di che tipo? Insoma devi postare il codice dell'applicazione.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100
    Allora ecco i pezzi di codice:

    Nel primo fotogramma dichiaro tutte le variabili dei suoni e dei pulsanti dei relativi oggetti presenti in libreria e poi li metto in due Array per pescare di volta in volta in modo casuale e le due funzioni "bene" e male" che richiamo con l'evento click del mouse:

    codice:
    var AEROPLANO:aeroplano = new aeroplano();
    var AMBULANZA:ambulanza = new ambulanza();
    var ANATRA:anatra = new anatra();
    ....
    var puls_AEROPLANO:puls_aeroplano = new puls_aeroplano();
    var puls_AMBULANZA:puls_ambulanza = new puls_ambulanza();
    var puls_ANATRA:puls_anatra = new puls_anatra();
    ....
    var suoni:Array = [AEROPLANO,AMBULANZA,ANATRA....]
    var scelte:Array = [puls_AEROPLANO,puls_AMBULANZA,puls_ANATRA...]
    
    function bene(e:MouseEvent):void {
    	beep.play();
    	if (livello < 20){
    		gotoAndStop("corretto")
    	} else gotoAndStop("fine_giusto")
    }
    function male(e:MouseEvent):void {
    	wrong.play();
    	if (tentativo < 3) {
    		gotoAndStop("errore");
    	} else gotoAndStop("fine_errore");
    }
    Dopodiché nel fotogramma "esercizio" scrivo il seguente codice:

    codice:
    if (tentativo == 1) {
    	caso1 = Math.floor((suoni.length)*Math.random());
    	dasuonare = suoni[num1]; 
    	var risposta1 = addChild(scelte[num1]);
    		
    	suoni.splice(caso1,1);
    	scelte.splice(caso1,1);
    	possibilità = scelte.slice();
    
    	caso2 = Math.floor((possibilità.length)*Math.random());
    	var risposta2 = addChild(possibilità[caso2]);
    	possibilità.splice(caso2,1);
    	
    	caso3 = Math.floor((possibilità.length)*Math.random());
    	risposta3 = addChild(possibilità[caso3]);
    	possibilità.splice(caso3,1);
    	
    	caso4 = Math.floor((possibilità.length)*Math.random());
    	var risposta4 = addChild(possibilità[caso4]);
    }
    
    soundChannel = dasuonare.play();
    risposte = [risposta1,risposta2,risposta3,risposta4]
    for (i = 0; i < 4; i++ )
    {
    	caso = Math.floor(Math.random()*risposte.length);
    	risposte[caso].x = posizioni[i][0];
    	risposte[caso].y = posizioni[i][1];
    	risposte[caso].scaleX = 0.75;
    	risposte[caso].scaleY = 0.75;
    	risposte.splice(caso,1)
    }
    
    risposta1.addEventListener("click", bene);
    risposta2.addEventListener("click", male);
    risposta3.addEventListener("click", male);
    risposta4.addEventListener("click", male);
    Se si da la risposta giusta nel fotogramma "corretto" c'è semplicemente il seguente codice e un pulsante che fa tornare all'esercizio:

    codice:
    soundChannel.stop();
    removeChild(risposta1)
    removeChild(risposta2)
    removeChild(risposta3)
    removeChild(risposta4)
    
    feedback_ok.addEventListener("click", function(){	
     gotoAndStop("esercizio");
    });
    Come dicevo mi sono accorto che se lo stesso oggetto in una prova è "dentro" risposta3 e in una successiva "dentro" risposta1, quando premo vengono eseguite sia la funzione "male" (per prima) sia la funzione "bene".

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Scusa hai messo il codice in tre fotogrammi chiave diversi?

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100
    quei tre pezzi sono messi in tre fotogrammi diversi.
    Un primo generale dove chiamo diciamo le variabili generali e sullo schermo appaiono le istruzioni;
    Un secondo che corrisponde all'esercizio dove si sente il suono e compaiono le immagini/pulsanti;
    Un terzo di feedback a secondo se la risposta è corretta o sbagliata.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Nessun errore del compilatore quando finisci nel frame "corretto"

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    100
    No...

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.