![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
С даблкликом все понятно, но вот беда, необходимо чтобы одиночный клик и даблклик отрабатывались независимо.
То есть: одиночный клик - действие номер один; даблклик - действие номер два; Сделал так, на объекте висит сдедующее: a.onPress=function(){ //------------------Double CLick--------------------- firstClick = getTimer(); if ((firstClick-secondClick)<450) { // Тут действие на даблклик } secondClick = getTimer(); //------------------End Double CLick------------------------ // Тут действие на один клик } выполняется при одиночночном - действие №1 при двойном действие №1+действие №2 Понимаю что можно, но жестоко туплю. Допомогите! ![]() |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
Спасение утопающих дело неблагодарное, да?
Вот что получилось сделать. Решение типа "через жопу", но работает. Код на объекте: 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. Отцы как ЭТО сделать красиво??? А не как это сделал я ![]() |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
Всем спасибо, все свободны
![]() Вот последняя версия 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 |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
Посмотрел, подумал - некрасиво, зачем объект, если есть 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(); } }; |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
А теперь вопрос к профи, если все это приводить в удобоваримый вид и оформить ввиде прототипа, получается следующее:
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){
var mc=this,md;
this.onMouseDown=function(){
if(!this.hitTest(_root._xmouse,_root._ymouse,true))return;
if(getTimer()-md<dt ){
clearInterval(mc.id)
mc.onDoubleClick();
}else {
md=getTimer();
mc.id=setInterval(function(){mc.onClick();clearInterval(mc.id)},dt)
}
}
}
test_mc.dblclick(300);
test_mc.onDoubleClick=function(){trace(this+' DblClick')};
test_mc.onClick=function(){trace(this+' Click')};
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|