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.
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.
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;
evidentemente non ho capito qualcosa.
questa la classe per riprodurre il suono:
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.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;
}
}
}
}
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.
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.
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.
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.
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:String, play_btn:MovieClip=null, stop_btn:MovieClip=null, volume_up:MovieClip=null, volume_down:MovieClip=null)
qualche link a riguardo?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.
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
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.
grazie.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:String, play_btn:MovieClip=null, stop_btn:MovieClip=null, volume_up:MovieClip=null, volume_down:MovieClip=null)
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.
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
qualche link a riguardo?
Esatto, mentre se provi a chiamarli da un oggetto non aggiunto ottieni "null".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?