Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Click su MovieClip innestati [+ utile prototipo carica immagini]

    Salve.

    Mi sto avvicinando all'AS e in particolare trovo meravigliosa la OOP con i prototipi.

    Ho fatto questo semplice prototipo che funziona un amore (e che potrà essere utile a qlk1...) :
    Codice PHP:
    MovieClip.prototype.creaImmagine = function(nome,posX,posY) {
        var 
    idImmagine arguments[3];
        var 
    idRif:Number=_global.id++;
        
    this.createEmptyMovieClip("immagine"+idRifthis.getNextHighestDepth());
        
    with (this["immagine"+idRif]) {
            
    _x=posX;
            
    _y=posY;
            
    loadMovie("http://www."+_global.siteaddr+"/"+nome,this["immagine"+idRif]);
        }

        if (
    idImmagine!=undefined) {
            
    this["immagine"+idRif].id=idImmagine;    
            
    this["immagine"+idRif].onPress=function() {
                
    this.ButtonClick();
            }
        }

    Che come vedete mi crea dentro il clip di "this" un clip vuoto di nome "immagine"+un numero progressivo _global.id che inizializzo a 1 e me lo posiziona in posX, posY (relative al clip che lo contiene).
    Ci carico l'immagine "nome" dal percorso _global.siteaddr e infine rendo il clip contenuto cliccabile con una apposita funzione.

    E' qui l'inghippo: l'immagine non mi risulta cliccabile!!! Non mi da la manina e cliccando non succede niente... Ho fatto la stessa cosa per dei pulsanti testuali e funziona perfettamente, ma con le immagini proprio non va...

    Credo che la difficoltà provenga dal clip contenitore...
    Metto anche il codice di come richiamo la funzione...
    Codice PHP:
    // Codice esterno a qualsiasi funzione...
    var corpo:MovieClip this.createEmptyMovieClip("corpo"this.getNextHighestDepth());
    corpo.creaImmagine("img/prova.jpg",100,20,32); 
    Qualcuno può aiutarmi?
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    il problema sta nel fatto che ogni cosa nel clip (eventi, variabili, proprietà ecc...) viene eliminato (sostituito) al momento in cui fai il LoadMovie, l'unica cosa che puoi fare è creare un ulteriore clip che sia quello che effettivamente caricherà l'immagine
    codice:
    MovieClip.prototype.creaImmagine = function(nome,posX,posY) {
        var idImmagine = arguments[3];
        var idRif:Number=_global.id++;
        this.createEmptyMovieClip("immagine"+idRif, this.getNextHighestDepth());
        with (this["immagine"+idRif]) {
            createEmptyMovieClip("dentro", 1);
            _x=posX;
            _y=posY;
           dentro.loadMovie("http://www."+_global.siteaddr+"/"+nome,this["immagine"+idRif]);
        }
    
        if (idImmagine!=undefined) {
            this["immagine"+idRif].id=idImmagine;    
            this["immagine"+idRif].onPress=function() {
                this.ButtonClick();
            }
        }
    }

  3. #3
    Grazie and80!!!

    Il problema mi era già capitato e avevo risolto nello stesso modo, ma pensavo di fare troppe "schifezze" col codice in questo modo...

    In effetti ora che mi ci fai pensare, avevo notato che creando una linea dentro il MovieClip, prima di caricare l'immagine questa poi spariva inspiegabilmente (ora si spiega tutto...!)

    Grazie ancora!!!
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da NoR

    Grazie ancora!!!
    ;-)

  5. #5
    Adesso però il problema continua.... :-)

    Se però adesso il Movie contenitore dovesse scorrere?

    Allo scopo mi sono fatto un altro prototipo, che posto solo perché potrebbe essere utile a qualcun altro...

    Codice PHP:
    MovieClip.prototype.scorrimento=function() {
        
    //riceve la lunghezza della parte visibile del contenitore (mascherato)
        
    this.v_lun arguments[0] == undefined true arguments[0];

        if (
    this.v_lun) {
            
    this.onEnterFrame=function () {
                
    //memorizzo la posizione originale del contenitore (origine della maschera)
                
    if (this.original_x==undefinedthis.original_x=this._x;
                
    // questa è la posizione del Mouse rispetto alla maschera
                
    posMouseX=this._xmouse-(this.original_x-this._x);
                if ((
    posMouseX>(2*this.v_lun/3))&&(posMouseX<this.v_lun)&&(this.original_x-this._x+this.v_lun<this._width)) {
                        
    this._x-=Math.round(Math.abs(posMouseX-this.v_lun/2)/30);
                }
                if ((
    posMouseX>0)&&(posMouseX<(this.v_lun/3))&&(this._x<this.original_x)) {
                        
    this._x+=Math.round(Math.abs(posMouseX-this.v_lun/2)/30);
                }
            }
        } else {
            
    this.onEnterFrame=null;
        }

    che richiamo in questo modo:

    Codice PHP:
    pulsantiera.onRollOver=function() {
        
    this.scorrimento(1119);
    }
    pulsantiera.onRollOut=function() {
        
    this.scorrimento(false);

    Perché a questo punto i pulsanti ivi contenuti non sono più cliccabili?
    In pratica ora scorre bene, ma al click del contenuto non funge più nulla....

    Sembra che l'evento generato al click del mouse sia relativo a "pulsantiera" e non più ai bottoni ivi contenuti.
    Sicuramente deve esserci un altro errore logico di ActionScript che non conosco...
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  6. #6
    Deve essere qualcosa a che fare con il RollOver...

    Prima caricavo delle immagini CHE NON ERANO CLICCABILI (il puntatore non si faceva a manina, per capirci) nel contenitore "corpo"...

    Se scrivo:

    Codice PHP:
    corpo.onRollOver=null;
    corpo.onRollOut=null
    il MC "corpo" diventa cliccabile (anche se non c'è alcun evento onPress definito.)!!!

    Cioé uno non può definire un RollOver senza che il puntatore indichi la possibilità di un click che non c'è??? :master:

    Cmq, più grave è il fatto che scopaia la possibilità di catchare l'evento onPress del contenuto...
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  7. #7
    OK... quest'ultima cosa era facile...

    Codice PHP:
    corpo.useHandCursor=false
    Ma per il resto?
    Ho provato
    pulsantiera.trackAsMenu=true;
    pulsantiera.enabled=false;
    pulsantiera.focusEnabled=false;

    Niente!!!
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    quando setti degli eventi legati alla "posizione" del mouse (onRelease, onPress, onRollOver ecc...) il clip diventa automaticamente cliccabile ed esegue determinate operazioni,
    ma se tu setti anche un evento sul clip che contiene il precedente, quest'ultimo perde i suoi eventi in favore del contenitore, quindi devi scegliere tra i due a chi dare gli eventi

    ... se proprio hai necessità di altri eventi non legati strettamente a quelle azioni, ma che possono essere emulati, puoi utilizzare la classe Mouse ed i suoi eventi

  9. #9
    Ma se ho

    Contenitore
    |-MC1
    |-MC2

    non potrei tentare qualcosa del tipo:

    Codice PHP:
    Contenitore.onPress=function() {
        if ((
    this._xmouse>=0)&&(this._xmouse<140)) {
            
    MC1.onPress();
        } else if ((
    this._xmouse>=140)&&(this._xmouse<280)) {
            
    MC1.onPress();
        }

    Bah! :master:
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  10. #10
    E difatti ecco la soluzione:

    Codice PHP:
    pulsantiera.onPress=function() {
        for (
    a in this) { 
            if (
    typeof (this[a]) == "movieclip") { 
                if ((
    this._xmouse>this[a]._x)&&(this._xmouse<(this[a]._x+this[a]._width))&&(this._ymouse>this[a]._y)&&(this._ymouse<(this[a]._y+this[a]._height))) {
                    
    this[a].onPress();
                }
            } 
        }

    E' un piccolo arzigogolo, ma mica troppo complicato.
    In pratica per ogni MC contenuto verifico se ho cliccato su quelle coordinate...

    Semplice e portabile.

    Lo posto perché possa essere di aiuto ad altri.

    Grazie And80 per lo stimolo!
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

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.