次のようなものは私にとってはうまくいきます。子を含むどこからでもコンテナをドラッグできます。アプリケーションに応じて使用するかどうかにかかわらず、コンテナが子からドラッグされた場合にクリックを防止するためにクリック抑制フラグを追加しました。
package
{
public class Main extends Sprite
{
private var container:Sprite = new Sprite();
private var suppressClick:Boolean = false;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
container.graphics.beginFill(0xff0000, 1);
container.graphics.drawRect(0, 0, 500, 500);
container.graphics.endFill();
addChild(container);
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
var child:Sprite = new Sprite();
child.graphics.beginFill(0x00ff00, 1);
child.graphics.drawRect(0, 0, 50, 50);
child.graphics.endFill();
child.addEventListener(MouseEvent.CLICK, onChildClick);
child.x = 100;
child.y = 100;
container.addChild(child);
}
private function onMouseDown(e:MouseEvent):void
{
suppressClick = false;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.startDrag();
}
private function onMouseMove(e:MouseEvent):void
{
suppressClick = true;
}
private function onMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.stopDrag();
}
private function onChildClick(e:MouseEvent):void
{
if(!suppressClick)
trace("child clicked");
}
}
}