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

    rilevamento coordinate di un oggetto in mvimento

    Salve,
    sto lavoando ad un progetto e mi sono bloccato in un punto:
    ho un oggetto che trascino col mouse e voglio fare in modo che via via che si avvicina ad un altro oggetto mi aumenti il volume di un mp3 di sottofondo.
    la parte relativa al suono è già imlementata, mi servirebbe solo sapere come rilevare, se è possibile, le coordinate dell'oggetto che trascino per poi da li ricavare la distanza ed effettuare le operazioni....

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    con un evento ENTER_FRAME
    codice:
    mc.addEventListener(MouseEvent.MOUSE_DOWN, trascina)
    function trascina(evt:MouseEvent):void{
    	mc.startDrag()
    }
    addEventListener(Event.ENTER_FRAME, leggi_coordinate)
    function leggi_coordinate(evt:Event):void{
    	trace(mc.x)
    	trace(mc.y)
    }

  3. #3
    grazie per la celere risposta
    però io non devo solo leggerle dinamicamente ma fare un azione in base a queste coordinate ossia:
    in ogni punto in cui si sposta l'immagine devo prenderne le coordinate e calcolare la distanza con un altro punto e in base a questa distanza compiere un'altra azione. cioè non c'è bisogno che io personalmente legga le coordinate ma che le legga una funzione che deve poi calcolare la distanza, ripeto dinamicamente, come faccio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    ma si avvicina da un solo lato?

  5. #5
    no in realtà da qualsiasi lato, io perciò voglio trasformarlo in un punto e calcolare la distanza con un altro....

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Non è tanto facile...

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao,
    in effetti, come dice rendi, non è troppo semplice.
    Ho provato comunque a buttare giù un piccolo esempio utilizzando le classi e i metodi disponibili in as3. In particolare la classe Point e il metodo distance che ti permette di determinare al volo la distanza tra due punti. La parte difficile è stata più che altro elaborare un algoritmo, che fosse anche customizzabile, per trasformare il valore distanza in volume.

    Questo e quanto sono riuscito a fare.
    codice:
    // PARAMETRI
    var distanzaMin:Number=10;
    var distanzaMax:Number=200;
    var volumeMin:Number=0;
    var volumeMax:Number=1;
    
    // CARICO E IMPOSTO IL SUONO
    var snd:Sound=new Sound();
    var sndCh:SoundChannel=new SoundChannel();
    var sndTr = new SoundTransform();
    snd.load(new URLRequest("music.mp3"));
    snd.addEventListener(Event.COMPLETE,onComplete,false,0,true);
    function onComplete(evt:Event):void {
    	sndCh=snd.play();
    	setVolume();
    }
    
    // ELEMENTO TRASCINABILE
    var obj1:Sprite = new Sprite();
    obj1.graphics.beginFill(0x009900);
    obj1.graphics.drawCircle(0, 0, 20);
    obj1.graphics.endFill();
    obj1.x=200;
    obj1.y=50;
    addChild(obj1);
    obj1.buttonMode=true;
    obj1.addEventListener(MouseEvent.MOUSE_DOWN, startDragObj);
    obj1.addEventListener(MouseEvent.MOUSE_UP, stopDragObj);
    
    // ELEMENTO "PUNTO DI RIFERIMENTO" (TRASCINABILE)
    var obj2:Sprite = new Sprite();
    obj2.graphics.beginFill(0x990000);
    obj2.graphics.drawCircle(0, 0, 5);
    obj2.graphics.endFill();
    obj2.x=200;
    obj2.y=200;
    addChild(obj2);
    obj2.buttonMode=true;
    obj2.addEventListener(MouseEvent.MOUSE_DOWN, startDragObj);
    obj2.addEventListener(MouseEvent.MOUSE_UP, stopDragObj);
    
    // RAPPRESENTAZIONE GRAFICA DELLE DISTANZE LIMITI
    obj2.graphics.lineStyle(1,0x6666cc);
    obj2.graphics.drawCircle(0, 0, distanzaMin);
    obj2.graphics.lineStyle(1,0xcccc00);
    obj2.graphics.drawCircle(0, 0, distanzaMax);
    
    
    // EVENTI TRASCINAMENTO
    function startDragObj(e:MouseEvent):void {
    	e.currentTarget.startDrag();
    	e.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE, setVolume);
    
    }
    function stopDragObj(e:MouseEvent):void {
    	stopDrag();
    	e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, setVolume);
    
    }
    
    // REGOLA VOLUME
    function setVolume(e:MouseEvent=null):void {
    	(e)&&e.updateAfterEvent();
    	var p1:Point=new Point(obj1.x,obj1.y);
    	var p2:Point=new Point(obj2.x,obj2.y);
    	var distanza:Number=Point.distance(p1,p2);
    	var distanzaAssoluta:Number =(distanza-distanzaMin)/(distanzaMax-distanzaMin);
    	var vol:Number= Math.min(volumeMax,Math.max(volumeMin, volumeMax+(volumeMin-volumeMax)*distanzaAssoluta));
    	sndTr.volume=vol;
    	sndCh.soundTransform=sndTr;
    }
    Lo script carica un mp3 esterno che dovrai predisporre nella cartella dove c'è il filmato e nominarlo "music.mp3".
    E' possibile impostare i 4 parametri iniziali. Lo script crea due sprite trascinabili in uno vengono disegnati i limiti della distanza entro i quali avviene la regolazione del volume.
    Ho messo giusto qualche commento.
    La parte che dovrebbe interessarti è la funzione setVolume.
    Vedi se può esserti utile come spunto per il tuo progetto.
    Se c'è bisogno di qualche chiarimento, chiedi pure.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Bravissimo Killer....

  9. #9
    Ti ringrazio Killer ma forse non è proprio quello che mi serve!
    Mi spiego meglio:
    Ho un oggetto trascinabile
    nella funzione mousedown inizio a spostarlo, le sue coordinate variano.trasformandolo in un punto,p1, ho solo due coordinate che lo identificano.
    Ho le coordinate di un altro puntoP2 che sono fisse.
    durante il trascinamento il punto p1 e il punto p2 supponiamo che si avvicinano e quindi la loro distanza diminuisce. Man mano che diminuisce io devo aumentare il volume di un suono.
    Ora ho già implementato il tutto ma non mi funziona perchè secondo me non vengono calcolate bene le coordinate IN EVOLUZIONE dell'oggetto trascinabile. il problema forse è proprio lì: la variabile distanza_attuale tra i due oggetti calcolata come differenza di coordinate tra i due punti è in continua modifica, come gestirla?

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2009
    residenza
    Olbia
    Messaggi
    2,930
    Ma hai provato lo script di kilerWorm? Scusa fa proprio quello che descrivi. Devi solo adattarlo al tuo filmato.

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.