2016-10-15 3 views
1

Я проводил некоторое тестирование относительно MouseEvents. Благодаря Нилу Дэвису, большинство из них было выяснено для меня. Теперь я хочу разработать коды, чтобы каждый раз, когда я оставлял клик, он начинал рисовать круги по координатам x и y мыши. Когда я отпущу левый щелчок мыши, он перестанет рисовать круги. Я пытался повторить это настолько, насколько это возможно, но это, когда я в конце концов застрял:Можем ли мы отключить MouseEvents?

stage.addEventListener(MouseEvent.MOUSE_DOWN, mClickOn); 
stage.addEventListener(MouseEvent.MOUSE_MOVE, mMove); 
stage.addEventListener(MouseEvent.CLICK, mClickOff); 

public var clickOn:Boolean; 
public var clickOff:Boolean; 

public function mClickOn(e:MouseEvent):void 
{ 
    clickOn = e.buttonDown; 
} 

public function mClickOff(e:MouseEvent):void 
{ 
    clickOff = e.buttonDown 
} 

public function mMove(e:MouseEvent):void 
{ 
    if (clickOn) //keep drawing when left click 
    { 
     draw.create(e.localX, e.localY); 
     addChild(draw); 
    } 
    else if (clickOff) //don't draw when you let go of left click 
    { 
     null; 
    } 
} 

Проблема заключалась в том, что MOUSE_DOWN верно, когда осталось щелкнул, но я предположил, что, когда мы не оставили нажав больше, это ll автоматически вернется к false. Для моего тестирования он остается верным после первого нажатия. Что касается CLICK, это всегда неверно.

Как сделать так, чтобы эти MouseEvents можно было включать и выключать? Я хочу сделать инструмент/симулятор карандаша.

+0

Пожалуйста, не забудьте ознакомиться со справочным материалом API, который я опубликовал по вашему последнему вопросу. Там действительно много хороших вещей, похоже, что вы не читали. –

+0

Ваш другой, если/нулевой блок бессмыслен. Все, если это подразумевают блоки. Если X, то y *, если ничего не делать * –

ответ

1

Вот идея:

  1. Когда кнопка мыши идет вниз, установите флаг верно, и установить его на ложь, когда мышь идет вверх.
  2. Проверьте значение этого флага в каждом цикле приложения (событие таймера или событие кадра).
  3. Начните прослушивание MOUSE_DOWN, когда выбран инструмент «draw circles».
  4. Остановите прослушивание MOUSE_DOWN, когда мышь опущена, и начните прослушивать MOUSE_UP
  5. Когда мышь поднимается вверх, снова начинайте слушать MOUSE_DOWN и прекратите слушать MOUSE_UP.
  6. прекратите прослушивание MOUSE_DOWN, когда инструмент выбран. (Я не показывают выборы инструмента и отмену части ниже Надеюсь, вы получите эту идею, хотя для каждого инструмента, вам необходимо повторить этот процесс..)

ли что-то вроде этого:

private function mDown(me:MouseEvent):void{ 
    _mDown = true; 
    stage.removeEventListener(MouseEvent.MOUSE_DOWN, mDown); 
    stage.addEventListener(MouseEvent.MOUSE_UP, mUp); 
} 

private function mUp(me:MouseEvent):void{ 
    _mDown = false; 
    stage.removeEventListener(MouseEvent.MOUSE_UP, mUp); 
    stage.addEventListener(MouseEvent.MOUSE_DOWN,mDown); 
} 

, и тогда вы будете нуждаться в appTick или gameLoop или TimerEvent, такие как

stage.addEventListener(Event.ENTER_FRAME, applicationLoop); 

private function applicationLoop(e:Event):void{ 
    if (_mDown == true){ 
     drawCircles(); 
    } 

, а затем

private function drawCircles():void{ 
    // your draw logic 
} 

Это должно быть сделано.

ПРИМЕЧАНИЕ , если вы хотите, чтобы рисовать круги, как инструмент аэрозольной краски работает (продолжает добавлять больше краски, даже если мышь не двигается) Проверьте _mDown пометки каждый кадр. Если вы хотите, чтобы он только добавлял круги при движении мыши, тогда вместо этого отметьте флаг в событии MOUSE_MOVE.

+0

Удивительный! Это получилось отлично. Еще раз спасибо Нил Дэвис! – Zulu

+0

Вы ставите. Рад, что это сработало для вас. Не забудьте проверить эти документы API;) –

0

Щелчок нажал кнопку мыши и отпустил снова. Это не полезно для вашей ситуации, так как вы хотите индивидуально смотреть вниз и вверх мыши, чтобы начать или остановить процесс рисования. Использование здесь MouseEvent.MOUSE_DOWN и MouseEvent.MOUSE_UP здесь более уместно.

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

stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 

public function onMouseDown(e:MouseEvent):void 
{ 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 

    stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
} 

public function onMouseUp(e:MouseEvent):void 
{ 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); 

    stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
} 

public function onMouseMove(e:MouseEvent):void 
{ 
    draw.create(e.localX, e.localY); 
    addChild(draw); 
} 
+0

Спасибо! Я тоже пробовал этот код! Добавлено в мои заметки – Zulu

Смежные вопросы