Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.09.2005, 16:19
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 1  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: Oct 2004
Сообщений: 141
По умолчанию DoubleClick-extended. Не пинайте.

С даблкликом все понятно, но вот беда, необходимо чтобы одиночный клик и даблклик отрабатывались независимо.
То есть:
одиночный клик - действие номер один;
даблклик - действие номер два;

Сделал так, на объекте висит сдедующее:

a.onPress=function(){
//------------------Double CLick---------------------
firstClick = getTimer();
if ((firstClick-secondClick)<450) {
// Тут действие на даблклик
}
secondClick = getTimer();

//------------------End Double CLick------------------------
// Тут действие на один клик


}
выполняется при одиночночном - действие №1
при двойном действие №1+действие №2
Понимаю что можно, но жестоко туплю.
Допомогите!

Старый 07.09.2005, 17:37
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 2  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: 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.

Отцы как ЭТО сделать красиво??? А не как это сделал я

Старый 07.09.2005, 18:20
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 3  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: 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

Старый 08.09.2005, 17:08
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 4  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: 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();
}

};

Старый 08.09.2005, 17:22
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 5  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: 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.

Старый 08.09.2005, 17:58
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не очень понял в чем проблема..
глянь такой вариант
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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