![]() |
DoubleClick-extended. Не пинайте.
С даблкликом все понятно, но вот беда, необходимо чтобы одиночный клик и даблклик отрабатывались независимо.
То есть: одиночный клик - действие номер один; даблклик - действие номер два; Сделал так, на объекте висит сдедующее: a.onPress=function(){ //------------------Double CLick--------------------- firstClick = getTimer(); if ((firstClick-secondClick)<450) { // Тут действие на даблклик } secondClick = getTimer(); //------------------End Double CLick------------------------ // Тут действие на один клик } выполняется при одиночночном - действие №1 при двойном действие №1+действие №2 Понимаю что можно, но жестоко туплю. Допомогите! :( |
Спасение утопающих дело неблагодарное, да?
Вот что получилось сделать. Решение типа "через жопу", но работает. Код на объекте: onClipEvent (load) { delay = 450; k=0; } on (release) { firstClick = getTimer(); _root.createEmptyMovieClip("testTimer",100); _root.testTimer.k=0; _root.testTimer.onEnterFrame = function(){ trace(k); k++; if(k>5){ //------Действие 1 _y-=15; //------Конец Действие 1 k=0; trace ("YESSS"); //break; _root.testTimer.removeMovieClip(); } } if ((firstClick-secondClick)<delay) { //------Действие 2 _y+=15; //------Конец Действие 2 k=0; _root.testTimer.removeMovieClip(); } //else{_y-=15;} secondClick = getTimer(); } При первом клике создает Мувик _root.testTimer и вешает на него функцию onEnterFrame если прийдет второй клик _root.testTimer убивается и выполняется действие 2. Если второй клик не приходит _root.testTimer отсчитывает положенные кадры и запускает действие 1. Отцы как ЭТО сделать красиво??? А не как это сделал я :) |
Всем спасибо, все свободны :)
Вот последняя версия DoubleClickExt На объект: on (release) { firstClick = getTimer(); this.obj = new Object(); this.obj.interval = function() { //------Действие 1 _y-=15; //------Конец Действие 2 delete obj; } setInterval( this.obj, "interval", 200 ); if ((firstClick-secondClick)<200) { delete obj; //------Действие 2 _y+=15; //------Конец Действие 2 } secondClick = getTimer(); } В итоге кликаний срабатывает либо Действие 1 либо Действие 2; Люблю я Flasher.ru |
Посмотрел, подумал - некрасиво, зачем объект, если есть clearInterval?
Последняя версия: onClipEvent (load) {var intervalDC:Number=0;} on (press) { firstClick = getTimer(); var intervalAct = function() { //------Действие 1 //------Конец Действие 1 clearInterval(intervalDC); intervalDC=0; } if(intervalDC==0){ intervalDC = setInterval(intervalAct, 200); } if ((firstClick-secondClick)<200) { //------Действие 2 //------Конец Действие 2 clearInterval(intervalDC); intervalDC=0; } secondClick = getTimer(); } }; |
А теперь вопрос к профи, если все это приводить в удобоваримый вид и оформить ввиде прототипа, получается следующее:
MovieClip.prototype._onDoubleClick = function(func1:Function, arg1:Object, func2:Function,arg2:Object) { var intervalDC:Number=0; this.onPress = function() { firstClick = getTimer(); var intervalAct = function() { //------Действие 1 func1(arg1); //------Конец Действие 1 clearInterval(intervalDC); intervalDC=0; } if(intervalDC==0){ intervalDC = setInterval(intervalAct, 200); } if ((firstClick-secondClick)<200) { //------Действие 2 func2(arg2); //------Конец Действие 2 clearInterval(intervalDC); intervalDC=0; } secondClick = getTimer(); } }; function oneClk(arg) { trace("oneClk"); _y+=arg; }; function dblClk(arg) { trace("dblClk"); _y+=arg; }; mc._onDoubleClick(oneClk, -15,dblClk, 15); Одна беда чаще вего функции относящиеся к объекту хранятся в самом объекте в этом примере на 15 пикселей прыгает _root, как заставить прототип исполнять функции внутри объекта. Конкретная задача надо чтобы mc прыгал а не _root, при этом функции должны лежать внутри mc. |
не очень понял в чем проблема..
глянь такой вариант onClick() вызывается с задержкой, потому как надо удостовериться, что это не двойной клик Код:
MovieClip.prototype.dblclick=function(dt){ |
Проблема в том что если в руте написать:
mc.oneClk= function(arg){ trace("oneClk"); _y+=arg; }; mc.dblClk=function(arg) { trace("dblClk"); _y+=arg; }; mc._onDoubleClick(mc.oneClk, -15,mc.dblClk, 15); То двигаться будет не mc а _root. Если вместо этого повесить на сам mc : onClipEvent (load) { this._onDoubleClick(oneClk, -15,dblClk, 15); function oneClk(arg){ trace("oneClk"); _y+=arg; }; function dblClk(arg) { trace("dblClk"); _y+=arg; }; } Все работает как надо, но это не приемлимо если mc создается динамически (скриптами). |
Блин прозрение:
mc.some = function(){} и function mc выешеное на сам mc Отличаются! Самое странное, что написав кучу кодов, не обращал на это внимание. С другой стороны, раз не замечал, значит не критично :) Всем страждущим, пользуйте прототип, очень удобно. И еще к вопрос в контексте к Силину, а зачем там hitTest? |
hitTest там, чтоб срабатывало тока на клике по мувику..
|
Зачем если там есть onRelease?
|
| Часовой пояс GMT +4, время: 15:42. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.