He realizado un juego sencillo, el PONG, con AS3 en Flash CS. Cuando la pelota golpea la pala tarda en reproducir el sonido, son miléseimas de segundo de retardo pero se nota bastante. He comprobado que el archivo mp3 no empieza con un silencio, de manera que no se si puede deberse a la cantidad de código que le paso al evento ENTER_FRAME.

El código es este, si veis alguna animalada aunque no tenga que ver con el problema podeis comentarla también:

Código :

fscommand("fullscreen", "true");
stage.scaleMode = "noScale";
Mouse.hide();
//
Player1_mc.stop();
Player2_mc.stop();
//
stage.addEventListener(Event.ENTER_FRAME, Main);
stage.addEventListener(KeyboardEvent.KEY_DOWN, Pulsa);
stage.addEventListener(KeyboardEvent.KEY_UP, Levanta);
//
ready_txt.visible = false;
ready_txt.x = (stage.stageWidth/2)-(ready_txt.width/2);
ready_txt.y = stage.stageHeight/2;
//
var      sound1:Sound            = new Sound(req);
var      req:URLRequest             = new URLRequest("sound1.mp3");
sound1.load(req);
//
var      PELOTA_VELOC:int         = 8;
var      HACIA_DERECHA:Boolean      = false;
var      IMPACTO:int               = 0;
var      PULSADO_ABAJO:Boolean      = false;
var      PULSADO_ARRIBA:Boolean      = false;
var      REINICIA:Boolean         = false;
var      PELOTA_OUT:Boolean         = false;
var      SCORE_FLAG:Boolean         = false;
var      SCORE1:int               = 0;
var      SCORE2:int               = 0;
//
function Ready(){
   PELOTA_OUT         = false;
   ready_txt.visible   = false;
   pelota_mc.visible   = true;
   if(!HACIA_DERECHA){
      pelota_mc.x = stage.stageWidth-200;
   }else{
      pelota_mc.x = 200;
   }
   SCORE_FLAG = false;
}
//
function Pulsa(e:KeyboardEvent) {
   if (e.keyCode == 40) {//Abajo
      PULSADO_ABAJO= true;
      PULSADO_ARRIBA= false;
   } else if (e.keyCode == 38) {//Arriba
      PULSADO_ARRIBA= true;
   } else {
      PULSADO_ABAJO = false;
      PULSADO_ARRIBA = false;
   }
}
//
function Levanta(e:KeyboardEvent) {
   PULSADO_ABAJO = false;
   PULSADO_ARRIBA = false;
}
//
function Main(e:Event) {
   score1_txt.text = String(SCORE1);
   score2_txt.text = String(SCORE2);
   
   if (PULSADO_ARRIBA) {
      Player2_mc.y -= PELOTA_VELOC;
   } else if (PULSADO_ABAJO) {
      Player2_mc.y += PELOTA_VELOC;
   }
   var player1_sup:int = Player1_mc.y-(Player1_mc.height/2);
   var player1_inf:int = Player1_mc.y+(Player1_mc.height/2);
   var player2_sup:int = Player2_mc.y-(Player2_mc.height/2);
   var player2_inf:int = Player2_mc.y+(Player2_mc.height/2);

   //PELOTA
   //Si pelota va hacia izquierda.
   if (!HACIA_DERECHA) {
      //Si no ha llegado a player1, ¡muévete!.
      if (pelota_mc.x >= Player1_mc.x+Player1_mc.width) {
         pelota_mc.x -= PELOTA_VELOC;
         PELOTA_OUT    = false;
      }else{
         //Si ha llegado a player1.
         //Si pelota está dentro de player1.
         if (!PELOTA_OUT && pelota_mc.y+(pelota_mc.height/2) > player1_sup && pelota_mc.y-(pelota_mc.height/2) < player1_inf) {
            sound1.play();
            Player1_mc.gotoAndPlay(1);
            if ( pelota_mc.y < player1_sup+(pelota_mc.width/2) ) {//Si impacta en parte superior.
               IMPACTO = 2;//rebota hacia arriba
               
            } else if (pelota_mc.y > player1_inf-(pelota_mc.width/2)) {//Si impacta en parte inf.
               IMPACTO = 1;//rebota hacia abajo
            } else{//Si impacta en centro.
               IMPACTO = 0;// rebota recto.
            }
            HACIA_DERECHA = true;
         }else{ //Si pelota está fuera de player1.
            PELOTA_OUT = true;
            pelota_mc.x -= PELOTA_VELOC; // Continúa su camino.
            if(!SCORE_FLAG){
               SCORE2++;
               SCORE_FLAG = true;
            }
            if(pelota_mc.x < 0){
               ready_txt.visible = true;
               pelota_mc.visible = false;
               if(pelota_mc.x < -1000){
                  Ready();
               }
            }
         }
      }
   }
   //Si pelota va hacia derecha
   if (HACIA_DERECHA) {
      //Si no ha llegado a player2, ¡muévete!.
      if (pelota_mc.x <= Player2_mc.x-Player2_mc.width) {
         pelota_mc.x += PELOTA_VELOC;
         PELOTA_OUT    = false;
      }else{
         //Si ha llegado a player2.
         //Si pelota está dentro de player2.
         if (!PELOTA_OUT && pelota_mc.y+(pelota_mc.height/2) > player2_sup && pelota_mc.y-(pelota_mc.height/2) < player2_inf) {
            sound1.play();
            Player2_mc.gotoAndPlay(1);
            //Si impacta en la parte player2_superior de la paleta
            if ( pelota_mc.y < player2_sup+(pelota_mc.width/2) ) {
               IMPACTO = 2;//rebota hacia arriba
            } else if (pelota_mc.y > player2_inf-(pelota_mc.width/2)) {
               IMPACTO = 1;//rebota hacia abajo
            } else {
               IMPACTO = 0;
            }
            HACIA_DERECHA = false;
         }else{ //Si pelota está fuera de player2.
            PELOTA_OUT = true;
            pelota_mc.x += PELOTA_VELOC; // Continúa su camino.
            if(!SCORE_FLAG){
               SCORE1++;
               SCORE_FLAG = true;
            }
            if(pelota_mc.x > stage.stageWidth){
               ready_txt.visible = true;
               pelota_mc.visible = false;
               if(pelota_mc.x > stage.stageWidth+1000){
                  Ready();
               }
            }
         }
      }
   }

   //PLAYER 1
   //Impide que Player 1 salga de la pantalla
   //Si no te sales puedes moverte
   if (player1_sup>=0 && player1_inf<=stage.stageHeight) {
      Player1_mc.y = mouseY;
   } else {
      //Si te sales, recoloca la pala.
      if (player1_sup<0) {
         Player1_mc.y = Player1_mc.height/2;
      } else if (player1_inf>stage.stageHeight) {
         Player1_mc.y = stage.stageHeight-(Player1_mc.height/2);
      }
   }
   //PELOTA
   //Si golpea pala en extremos
   if (IMPACTO==2) {
      pelota_mc.y -= PELOTA_VELOC;
   }
   if (IMPACTO==1) {
      pelota_mc.y += PELOTA_VELOC;
   }
   //Si golpea techo
   if (pelota_mc.y < 0) {
      sound1.play();
      IMPACTO = 1;
   }
   //Si golpea suelo
   if (pelota_mc.y > stage.stageHeight) {
      sound1.play();
      IMPACTO = 2;
   }
   //Debug
   //campo_txt.text = "pelota_mc.x: "+String(pelota_mc.x)+"\nIMPACTO: "+String(IMPACTO)+"\nHACIA_DERECHA: "+String(HACIA_DERECHA);
}