на счет второго пункта - я именно так и предполагал, сейчас накидаю пример
Добавлено через 7 минут
Можно сделать так:

Код AS3:
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
private var tw1:Tw1;
private var player:PlayerMC;
public function Main()
{
tw1 = new Tw1();
tw1.x = 100;
tw1.y = 100;
tw1.name = "Instance1";
addChild(tw1);
//
player = new PlayerMC(tw1);
player.playAmount(3);
}
}
}

Код AS3:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.EventDispatcher;
public class PlayerMC extends EventDispatcher
{
private var mc:MovieClip;
public function PlayerMC(mc:MovieClip)
{
this.mc = mc;
mc.stop();
}
private var totalCount:uint;
private var currentCount:uint;
private function frameHandler(event:Event):void
{
if (mc.currentFrame == mc.totalFrames) {
currentCount++;
}
if (currentCount == totalCount) {
mc.stop();
mc.removeEventListener(Event.ENTER_FRAME, frameHandler);
}
}
public function playAmount(count:uint=1):void
{
this.totalCount = count;
this.currentCount = 0;
//
mc.addEventListener(Event.ENTER_FRAME, frameHandler);
mc.play();
}
public function stop():void
{
mc.removeEventListener(Event.ENTER_FRAME, frameHandler);
mc.stop();
}
}
}
Т.е. класс PlayerMC не является визуальным, это всего лишь контроллер для управления анимацией.
Можно еще расширить класс MovieClip добавить в него метод playAmount, и вызывать его напрямую tw1.playAmount(3), но я бы использовал первый вариант.