Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    as3 - assegnare mc come proprietà

    ho una classe A in cui un mc svolge determinate funzioni.

    nella document class istanzio questa classe.

    come associo ad un pulsante sullo stage i metodi dell'mc generico definito nella classe A?

    si può fare?

    grazie.
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Puoi fare in due modi, uno più corretto sintatticamente e uno meno.

    Il primo è quello di usare get nella classe creando una funzione pubblica e richiamandola come proprietà dall'istanza della stessa classe.

    public function get movieClip ():MovieClip {

    }

    e sulla document

    nome_istanza_di_A.movieClip.ecc...

    Il secondo è di creare direttamente l'mc come variabile pubblica in modo da poterne disporre anche fuori dalla classe stessa

    public var mc:MovieClip;

  3. #3
    evidentemente non ho capito qualcosa.

    questa la classe per riprodurre il suono:

    Codice PHP:
    package {

        
    import flash.display.MovieClip;
        
    import flash.events.*;
        
    import flash.media.Sound;
        
    import flash.media.SoundChannel;
        
    import flash.net.URLRequest;

        public class 
    BgSound extends MovieClip {

            private var 
    _sound:Sound;
            private var 
    _channel:SoundChannel;
            private var 
    _is_playing:Boolean;
            private var 
    _position:Number;
            public var 
    _play_btn:MovieClip;
            public var 
    _stop_btn:MovieClip;

            public function 
    BgSound() {
                
    initButtonListeners();
                
    _sound=new Sound(new URLRequest("bg_sound/bg_sound.mp3"));
                
    _channel=_sound.play();
                
    _is_playing=true;
                
    _channel.addEventListener(Event.SOUND_COMPLETE,sound_complete);
            }
            private function 
    sound_complete(e:Event):void {
                
    _channel=_sound.play();
            }

            
    //public function get _play_btn():MovieClip {
            //
            //}
            //public function get _stop_btn():MovieClip {
            //
            //}
            ////---------------------------sound controls-------------------------//
            
    private function initButtonListeners():void {
                
    _play_btn.buttonMode=true;
                
    _stop_btn.buttonMode=true;
                
    _play_btn.addEventListener(MouseEvent.CLICK,play_music);
                
    _stop_btn.addEventListener(MouseEvent.CLICK,stop_music);
            }

            private function 
    play_music(e:MouseEvent):void {
                if (! 
    _is_playing) {
                    
    _channel=_sound.play(_position);
                    
    _is_playing=true;
                }
            }
            private function 
    stop_music(e:MouseEvent):void {
                if (
    _is_playing) {
                    
    _position=_channel.position;
                    
    _channel.stop();
                    
    _is_playing=false;
                }
            }
        }

    io vorrei dalla document fare in modo che due mc che ho sullo stage funzionino come _play_btn e _stop_btn ma non ho risultati.
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Da come aavevi scritto, pensavo che lì'mc di cui parlavi fosse dichiarato nella classe e non che fosse sullo stage, cambia un po'

    Per "cercare" i movieclip che hai sullo stage da una classe "innestata" nella document class devi cercarli tramite "root" o "stage", ma il modo di trovarli dipende dal fatto che la classe BgSound sia stata aggiunta o meno allo stage con addChild.

  5. #5
    allora supponiamo di avere un'istanza di BgSound nella document e sullo stage due mc.
    innanzi tutto perchè dovrei mettere addChild(_sound); se non ci sono elementi visuali nella classe?
    poi, come si può ottenere che ad esempio mc1 abbia le funzionalità di _play_btn dichiarate nella classe BgSound?

    c'è forse un modo migliore per gestire la cosa?

    vorrei poter creare una classe riutilizzabile e quindi dover solo assegnare i pulsanti istanziando la classe dalla document ma non riesco a capire come gestire la cosa.
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  6. #6
    ho risolto con questo costruttore:

    public function BgSound(mp3:String, play_btn:MovieClip, stop_btn:MovieClip, volume_up:MovieClip, volume_down:MovieClip) {

    passando come parametri vari mc istanziati dalla document.
    in questo modo riesco a mantenere privati tutti i metodi e attributi della classe.

    funziona ma....è corretto?
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se non è una classe visuale, non ha senso estendere movieclip, al massimo potresti gestirla come componente e fissare i clip direttamente nell'oggetto stesso, ma è un altro discorso.
    L'addChild deriva dal fatto che facendolo vengono valorizzate le proprietà root e stage che prima dell'addChild non lo sono. Facendo in questo modo avresti la libertà di gestire quindi i clip nello stage richiamandoli appunto da stage o root.
    Nel caso che non si tratti di una classe visuale, puoi semplicemente creare una proprietà da valorizzare nel costruttore o come proprietà a sè, anche se puoi fare la stessa cosa nel modo che hai scelto, ossia valorizzando direttamente i pulsanti che ti servono dal costruttore senza passare da root. Certo è che in questo modo sarai costretto a passare questi valori in ogni caso, anche quando ad esempio i pulsanti non ci sono, ma considerato che in as3 si può decidere il valore dei parametri opzionali, con questo costruttore dovresti andare bene:

    Codice PHP:
    public function BgSound(mp3:Stringplay_btn:MovieClip=nullstop_btn:MovieClip=nullvolume_up:MovieClip=nullvolume_down:MovieClip=null

  8. #8
    Originariamente inviato da and80
    Se non è una classe visuale, non ha senso estendere movieclip, al massimo potresti gestirla come componente e fissare i clip direttamente nell'oggetto stesso, ma è un altro discorso.
    qualche link a riguardo?
    Originariamente inviato da and80
    L'addChild deriva dal fatto che facendolo vengono valorizzate le proprietà root e stage che prima dell'addChild non lo sono. Facendo in questo modo avresti la libertà di gestire quindi i clip nello stage richiamandoli appunto da stage o root.
    cioè se ho capito bene root o stage possono essere chiamati dalla classe istanziata solo se questa è stata aggiunta con addChild?
    Originariamente inviato da and80
    Nel caso che non si tratti di una classe visuale, puoi semplicemente creare una proprietà da valorizzare nel costruttore o come proprietà a sè, anche se puoi fare la stessa cosa nel modo che hai scelto, ossia valorizzando direttamente i pulsanti che ti servono dal costruttore senza passare da root. Certo è che in questo modo sarai costretto a passare questi valori in ogni caso, anche quando ad esempio i pulsanti non ci sono, ma considerato che in as3 si può decidere il valore dei parametri opzionali, con questo costruttore dovresti andare bene:

    Codice PHP:
    public function BgSound(mp3:Stringplay_btn:MovieClip=nullstop_btn:MovieClip=nullvolume_up:MovieClip=nullvolume_down:MovieClip=null
    grazie.
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da eddie felson
    qualche link a riguardo?
    Non ho mai approfondito la cosa, ma mi pare che già nella guida in linea di flash l'argomento sia spiegato abbastanza bene.

    Originariamente inviato da eddie felson
    cioè se ho capito bene root o stage possono essere chiamati dalla classe istanziata solo se questa è stata aggiunta con addChild?
    Esatto, mentre se provi a chiamarli da un oggetto non aggiunto ottieni "null".

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.