ubica sonido musica insertar inserta importar editar donde como boton animate agregar actionscript-3

actionscript-3 - musica - editar sonido en animate



Reproducción de sonidos en Actionscript (2)

@Neal Davis tiene razón acerca de lo que está causando el problema, sin embargo, sugiero eliminar el detector de eventos una vez que el animal está en su posición de destino en lugar de escuchar el evento MOUSE_UP en el animal en la función de liberación:

function fl_ReleaseToDrop_3(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop_3); Pig.stopDrag(); //... }

Sugerencia adicional.

También como señaló @Oganis. Es mucho más simple tener un código más genérico. Considera tener algo como esto:

Clase de documento:

package { import flash.display.Sprite; import flash.geom.Point; public class Main extends Sprite { private var animals:Vector.<Animal> = Vector.<Animal>([]); public function Main() { animals.push(new Animal("pig", pigMc, 578, 208, "oink.mp3")); animals.push(new Animal("cow", cowMc, 411, 140, "moo.mp3")); animals.push(new Animal("duck", duckMc, 56, 225, "quack.mp3")); } } }

Y la clase de Animal simple:

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; import flash.media.Sound; import flash.net.URLRequest; public class Animal { private var _name:String; private var _dropMargin:Number = 10; private var _startPos:Point = new Point(); private var _endPos:Point = new Point(); private var _sound:Sound; private var _view:Sprite; public function Animal(name:String, view:Sprite, endX:Number = 0, endY:Number = 0, sound:String = null) { _name = name; _view = view; _startPos.x = _view.x; _startPos.y = _view.y; _endPos.x = endX; _endPos.y = endY; _sound = new Sound(new URLRequest(sound)); view.addEventListener(MouseEvent.MOUSE_DOWN, onMDown); } private function onMDown(e:MouseEvent):void{ _view.stage.addEventListener(MouseEvent.MOUSE_UP, onMUp); _view.startDrag(); } private function onMUp(e:MouseEvent):void { _view.stage.removeEventListener(MouseEvent.MOUSE_UP, onMUp); _view.stopDrag(); //Distance to destination point var dd:Number = Point.distance(pos, _endPos); if (dd > dropMargin) pos = _startPos; else { pos = _endPos; _sound.play(); } } public function get view():Sprite{return _view;} public function get dropMargin():Number{return _dropMargin;} public function set dropMargin(value:Number):void{_dropMargin = value;} public function get pos():Point{return new Point(_view.x, _view.y);} public function set pos(value:Point):void{ _view.x = value.x; _view.y = value.y; } } }

Tengo un simple juego de arrastrar y soltar que comenzó en flash y funciona principalmente.

He agregado mis animales y puedes arrastrarlos y soltarlos en el lugar correcto. También he agregado sonido para que cuando el animal caiga en el lugar correcto, eso funcione, pero cada vez que agrego un animal nuevo al lugar correcto, reproduce ese sonido y el último sonido de animal también.

ej . coloque el cerdo en el espacio del cerdo, reproduce la vaca del lugar del sonido del cerdo en el espacio de la vaca, reproduce el sonido de la vaca y el pato del lugar del cerdo en el espacio del pato, reproduce el sonido del pato y el sonido de la vaca y el cerdo.

Obviamente, solo quiero reproducir el sonido cuando el animal se coloca en el lugar correcto: al caer (no en la próxima caída del animal también)

No estoy seguro de lo que hice mal

/ * Arrastrar y soltar Hace que la instancia de símbolo especificada se pueda mover arrastrando y soltando. * /

import flash.media.Sound; var offset:int = 10; var pigStartX:int = 196.80; var pigStartY:int = 292.10; var pigEndX:int = 578.40; var pigEndY:int = 208.50; Pig.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag); function fl_ClickToDrag(event:MouseEvent):void { Pig.startDrag(); } stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop); function fl_ReleaseToDrop(event:MouseEvent):void { Pig.stopDrag(); // dragging and dropping the pieces while checking for correct location if(Pig.x < pigEndX - offset || Pig.x > pigEndX + offset || Pig.y < pigEndY - offset ||Pig.y > pigEndY + offset){ Pig.x = pigStartX; Pig.y = pigStartY; } else{ //set piece back to original position Pig.x = pigEndX; Pig.y = pigEndY; var oink:PigOink = new PigOink(); var channel:SoundChannel = oink.play(); //checkGame(); } }

/ * Arrastrar y soltar Hace que la instancia de símbolo especificada se pueda mover arrastrando y soltando. * /

var cowStartX:int = 324; var cowStartY:int = 317.95; var cowEndX:int = 411.50; var cowEndY:int = 140.95; Cow.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag_2); function fl_ClickToDrag_2(event:MouseEvent):void { Cow.startDrag(); } stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop_2); function fl_ReleaseToDrop_2(event:MouseEvent):void { Cow.stopDrag(); // dragging and dropping the pieces while checking for correct location if(Cow.x < cowEndX - offset || Cow.x > cowEndX + offset || Cow.y < cowEndY - offset ||Cow.y > cowEndY + offset){ Cow.x = cowStartX; Cow.y = cowStartY; } else{ //set piece back to original position Cow.x = cowEndX; Cow.y = cowEndY; var moo:CowMoo = new CowMoo(); var channel:SoundChannel = moo.play(); //checkGame(); } }

/ * Arrastrar y soltar Hace que la instancia de símbolo especificada se pueda mover arrastrando y soltando. * /

var duckStartX:int = 209.45; var duckStartY:int = 402.05; var duckEndX:int = 56.45; var duckEndY:int = 225.05; Duck.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag_3); function fl_ClickToDrag_3(event:MouseEvent):void { Duck.startDrag(); } stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop_3); function fl_ReleaseToDrop_3(event:MouseEvent):void { Duck.stopDrag(); // dragging and dropping the pieces while checking for correct location if(Duck.x < duckEndX - offset || Duck.x > duckEndX + offset || Duck.y < duckEndY - offset ||Duck.y > duckEndY + offset){ //set piece back to original position Duck.x = duckStartX; Duck.y = duckStartY; } else{ Duck.x = duckEndX; Duck.y = duckEndY; var quack:DuckQuack = new DuckQuack(); var channel:SoundChannel = quack.play(); //checkGame(); } }


Mire sus controladores de eventos MouseUp.

Está agregando el oyente del evento al escenario. Entonces todos se llaman cuando la etapa escucha un evento de mouse arriba.

Agregue esos oyentes a la vaca, al cerdo, etc., tal como lo hizo con los oyentes del mouse.

Eso debería resolverlo.

Pig.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag); function fl_ClickToDrag(event:MouseEvent):void { Pig.startDrag(); } //stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop); // change to this Pig.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);