Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как обработать "пока зажата мышь" и выход курсора за границы флешки (http://www.flasher.ru/forum/showthread.php?t=145979)

Polimorth 25.10.2010 14:11

Как обработать "пока зажата мышь" и выход курсора за границы флешки
 
Салюд, комрадэс!
Оптом два ламерских вопроса.
1) Как выполнят действия при ситуации "пока зажата мышь"?
Например, есть стрелка, прокручивающая изображение. При нажатии на неё тупо по onPress добавляем к координатам изображения какое-нибудь число. А как сделать, чтобы прокрутка шла пока мышь зажата?
2) При drag'n'drop'е когда курсор выходит за пределы флешки возникают волшебные явления.
Если, скажем, зажать кнопку мыши, тащить объект, и выйти за границы флешки, то при возвращении во флешку будет считаться, что кнопка мыши зажата - драг н дроп продолжится уже без всяких нажатий, просто по движению мыши. Кто-нибудь в курсе, как этого избежать?

Спасибо за внимание!

Добавлено через 2 минуты
Да, версия флеша - 8. Соответственно AS2

aksios 25.10.2010 14:17

1. Повесить проверку события с частотой, отличной от 1. Намекаю: к примеру ОнЕнтерФрейм.
2. Проблема красиво устранена в АС3, в АС2 лучше повесить условие "убейся" для координаты мыша на границах ролика - поля с запасом, чтобы сработать успело.

Polimorth 25.10.2010 14:45

1. А какое событие проверять? Если тот же онПресс, то эффект получается тот же самый. Или, может, я неправильно понимаю как задать частоту проверки события, оличную от 1?
Я пишу в первом кадре:
Код AS1/AS2:

this.onEnterFrame = function() {
        _root.left.onPress = function()  {действия}
}

ЗДесь left - та самая стрелка.

2. Реализовал.

Вообще спасибо большое, использование onEnterFrame позволило сильно упростить и улучшить флешку

aksios 25.10.2010 14:50

Так как у Вас прокрутка реализована? Поставьте в эту функцию в действия - прокрутить на пиксель.

Polimorth 25.10.2010 15:03

Ну тык у меня вместо "действия" и стоит изменения координат прокручиваемого объекта на пиксель)

aksios 25.10.2010 15:05

Упс, а где if? Он пресс один раз происходит - до следующего раза.

Polimorth 25.10.2010 15:11

Значит должно быть что-то в стиле
Код AS1/AS2:

this.onEnterFrame = function() {
        if (_root.left.onPress)
                  {действия}
}

А какой синтаксис тогда?

aksios 25.10.2010 15:37

Что то вроде:

Код AS1/AS2:

left.onPress=function(){a="ok"};
left.onRelease=function(){a="not ok"};
this.onEnterFrame = function() {
        if (a=="ok")
                  {scrooll._x++}}

:)

Polimorth 25.10.2010 17:44

Oh yeap! Спасибо большое, что потратили на нас неразумных столько времени)
Удачи!

Bred45 01.11.2010 16:24

А еще можно построить клип по границам флешки и отслеживать роллауты с ролловерами. Что-то вроде того

Код AS1/AS2:

var clip:MovieClip = _root.createEmptyMovieClip("clip", 1000);
clip.lineStyle(0,0,0);
clip.beginFill(0,0);
clip.moveTo(0,0);
var xMax:Number = Stage.width, yMax:Number = Stage.height;
clip.lineTo(0, yMax), clip.lineTo(xMax, yMax), clip.lineTo(xMax, 0), clip.lineTo(0);
clip.endFill();
clip.useHandCursor = false;
clip.onRollOut = function():Void  {
        trace("ушел");
};
clip.onRollOver = function():Void  {
        trace("вернулся");
};


mooncar 01.11.2010 17:06

Цитата:

Сообщение от Bred45 (Сообщение 946974)
А еще можно построить клип по границам флешки и отслеживать роллауты с ролловерами.

При быстром проходе мыши ролловеры и роллауты не сработают.
Уверенно этот вопрос решается только в AS3.

Bred45 01.11.2010 17:17

Вложений: 1
Очень может быть.
Но вот у меня не получается выйти за границы так, чтобы флешка это "упустила".

mooncar 01.11.2010 18:31

К сожалению, у меня плееры везде 10-ка.
Проверьте на младших версиях и на флешке, опубликованной на странице. Помнится, что такое решение "в лоб" при быстром проходе не работало.
А автору, если он будет использовать это решение, стоит добавить обработчик и на событие onDragOut, то есть
Код AS1/AS2:

clip.onRollOut = clip.onDragOut = function() ...

Тогда и при зажатой мыши также отработается функция ее "увода".
Я, например, всегда использую onRollOut только вкупе с onDragOut.

Polimorth 01.11.2010 22:26

Я использовал элементарную проверку на координаты в стиле
Код AS1/AS2:

_xmouse < граница флешки - 5
_ymouse < граница флешки - 5

Всё это дело в onEnterFrame. Конечно, на выходе получаем дикую кучу лишних проверок, однако для маленьких проектов это не кажется критичным.
Кстати, при зажатой мыши тоже отрабатывает.

Bred45 02.11.2010 11:53

Код AS1/AS2:

onEnterFrame = function(){
        trace(_xmouse)
}

Этого кода достаточно, чтобы убедиться, что Ваш вариант не идеален. Особенно при быстром движении мыши.

aksios 02.11.2010 12:38

Уже обсуждалась тема - в Ас1 корректная обработка выхода за границы не получиться. Есть варианты, но не один из них не является идеальным.
В частности, в приведенном примере - нажмите левую кнопку мышки и...


Часовой пояс GMT +4, время: 23:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.