Изменение формы при нажатии кнопки Action Script 3.0 - PullRequest
0 голосов
/ 02 марта 2011

Хорошо, извините, если на этот вопрос довольно легко получить ответ, но я просмотрел страницы и страницы в Google и не смог найти ничего похожего.Мне очень помогли, но я все еще не могу заставить эту часть моего ActionScript работать.У меня есть программа, которая при запуске позволяет рисовать случайные цветные квадраты по щелчку мыши.Я добавил кнопку, которая, как предполагается, может изменять нарисованную форму с прямоугольника на круг.Я не могу заставить эту кнопку работать.Вот как мой код выглядит до сих пор.

    var color:Number;

stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);

function startDrawing(e:MouseEvent):void {
    stage.addEventListener(MouseEvent.MOUSE_MOVE, makeShapes);
    color = Math.random() * 0xFFFFFF;
}

function stopDrawing(e:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, makeShapes);
}

function makeShapes(e:MouseEvent):void {
var rect:Rect = new Rect(10,10,color);
    addChild(rect);
    rect.x = mouseX;
    rect.y = mouseY;
}

shape_btn.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(event:MouseEvent):void {

}

Внизу я оставил это поле пустым, похоже, это часть, на которой я застрял.Я попытался просто установить VAR для моего класса «Эллипс», который я сделал, и он работает, но только один раз, когда я нажимаю кнопку.Это не остается кругом и позволяет мне рисовать с формой.Снова извините, я почувствовал, что довольно близко подошел к решению, а затем ударил стену.

1 Ответ

0 голосов
/ 03 марта 2011

Трудно понять, в чем сложность, но я попытаюсь ответить на то, что понимаю.

Во-первых, событие нажатия мыши на этапе захватит событие вашей кнопки, так что вы можете также избавиться от него и придерживаться одного события мыши.

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" где-то в вашем коде, вне функций.

Я также думаю, что рандомизация цвета должна быть в обработчике перемещения мыши, а не в щелчке мыши. Это специально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...