Трудно понять, в чем сложность, но я попытаюсь ответить на то, что понимаю.
Во-первых, событие нажатия мыши на этапе захватит событие вашей кнопки, так что вы можете также избавиться от него и придерживаться одного события мыши.
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
private function onMouseDown(ev:Event):void
{
if (ev.target==shape_btn)
changeShape();
else if (ev.target==stage)
startDrawing();
}
Или что-то в этом роде.
Во-вторых, я не знаю, что такое Rect. Это класс, к которому у вас есть доступ? Вот как я бы сделал это без специального класса:
private function makeShape():void
{
switch (shapeType)
{
case "rect":
drawRect();
break;
case "circle":
drawCircle();
break;
}
}
private function drawRect():void
{
var rect:Shape = new Shape();
rect.graphics.beginFill(color);
rect.graphics.drawRect(0, 0, 10, 10);
rect.x = mouseX;
rect.y = mouseY;
addChild(rect);
}
private function drawCircle():void
{
var circle:Shape = new Shape();
circle.graphics.beginFill(0xff0000);
circle.graphics.drawCircle(0, 0, 10);
circle.x = mouseX;
circle.y = mouseY;
addChild(circle);
}
и, наконец, функция changeShape:
private function changeShape():void
{
shapeType = shapeType=="rect"?"circle":"rect";
}
Есть лучшие способы сделать это, но при работе с двумя типами фигур это приемлемо.
Конечно, вам нужно иметь переменную shapeType: String = "rect" где-то в вашем коде, вне функций.
Я также думаю, что рандомизация цвета должна быть в обработчике перемещения мыши, а не в щелчке мыши. Это специально?