Хорошо, тогда такой вариант. Не знаю, насколько он выглядит логичным для вас, и хороший ли это способ. Скорее всего можно сделать и по другому.

Код AS3:
private var canPlaySound:Boolean;
private function doorOn(e:Event):void
{
// изначально мы не знаем о наличии столкновений
var hit:Boolean = false;
for (var i:int = 0; i < platformobj_2.length; i++)
{
//если столкновение произошло, то фиксируем это и выходим
//из цикла, ведь достаточно схватить только один хитТест
if (platformobj_2[i].hitTestObject(bg))
{
hit = true;
break;
}
}
//если столкновений так и небыло, то разрешаем звуку сыграть (в следующий раз).
//То есть звук будет играть, только если в предыдущем фрейме небыло обнаружено ни одного
//столкновения, а в текущем столкновение обнаружилось
if (hit == false)
{
canPlaySound = true;
}
// если столкновение произошло и звук можно проиграть, то запускаем звук
// и запрещаем звуку повторяться до тех пор, пока не обнаружится ни одного столкновения.
if (hit && canPlaySound)
{
var s:Sound = new SoundClass();
s.play();
canPlaySound = false;
}
}