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

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

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
AS3 не существует. Это миф.
99% занимающихся флэшом не знают что такое AS2.
из оставшегося процента половина до AS3 еще не добралась.
к тому же люди, которые знают AS2 и выше не задают вопросы "как отловить даблклик".
Данный топик помещен в раздел FAQ и предназначен для тех, у кого этот вопрос вызывает сложности.

Иванович по батюшке... Новое... хм... я очень стараюсь, поверь. Но новое у меня получается в среднем раз в год. Впрочем, и это считаю неплохим показателем.

D12... а... Тебе бы статейку на эту тему написать, типа "онтология ников".

- Откуда ты знаешь, что я моряк? И почему не знаешь, что моряки не плавают, а ходят?

Старый 09.06.2006, 17:26
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 32  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
2Ив, ну я бы не сказал что 99% не знают, может ты о России\СНГ говоришь =) ?
Код:
к тому же люди, которые знают AS2 и выше не задают вопросы "как отловить даблклик".
но зато я сутки гонялся по аське, и спрашивал у людей как сделлать так чтобы C# не ругался на AxShockwaveFlashObjects.AxShockwaveFlash =)

2 Д12
Тут мне кажется не откат назад, а откат просто демонстрация своего стиля, у меня например отрабатывание дабл клика вложенно в два базовых компонента(один из них для "легких" флэшек, реализует аналог IEventDispatcher из AS3, другой там где юзаются компоненты, наследует UIComponent ) тебе просто показали как делают это по другому.

Насчет кол-ва кода, я бы к нему не придерался, иногда я пишу
Код:
createEmptyMovieClip("mc",1).createTextField("txt",1,0,0,100,20).text = "hello";
иногда разношу по строчкам, иногда я инкапсулирую каждое действие, иногда пишу методы по 40 строк. объем кода зависит от целей, если цель не определенна точно, не вижу причины придераться к этому.(ну это не значит что надо выдавать 500 строк, для рисование квадрата)
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^


Последний раз редактировалось Nirth; 09.06.2006 в 17:28.
Старый 09.06.2006, 17:39
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 33  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
[...]99%[...] - отчего же... везде так. и Россия не исключение из правил.
просто flash, в отличие, скажем, от C# по определению юзает много людей не имеющих программерского образования да и желания плотно влезать в программинг. Им достаточно знать некоторые основы типа gotoAndStop и onMouseUp... и это нормально. Выделять в этом смысле Россию/СНГ я бы не стал.

Старый 09.06.2006, 18:02
Король вне форума Посмотреть профиль Отправить личное сообщение для Король Найти все сообщения от Король
  № 34  
Ответить с цитированием
Король
 
Аватар для Король

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 2,736
Отправить сообщение для Король с помощью ICQ
Цитата:
ыгы)))))))))))))

хи ))) хи )))) ну да ) да )))
поймут )вздохнут ) и начнут юзать поиск за готовым результатом)))))))))))))
ощущая) всю прелесть этого поиско-метода)))) и как это легко и просто )))))))))))))))))))))))))))))) чем см. выше))))
помой клавиатуру - залипает явно

Старый 10.06.2006, 01:06
Nidl вне форума Посмотреть профиль Отправить личное сообщение для Nidl Найти все сообщения от Nidl
  № 35  
Ответить с цитированием
Nidl

Регистрация: Mar 2006
Сообщений: 353
Код:
_root.z = 0;
_root.zz = 0;
_root.zzz = 0;
_root.mc.onMouseDown = function() {
	if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
		_root.zzz += 1;
	}
};
///////////////////////////////////////////
_root.onEnterFrame = function() {
	if (_root.zzz == 1) {
		_root.z = 1;
	}
	if (_root.zz>=40) {
		_root.z = 0;
		_root.zz = 0;
		_root.zzz = 0;
	}
	if (_root.zzz == 2) {
		_root.z = 0;
		_root.zz = 0;
		_root.zzz = 0;
		//////////////
		trace("Прошу прощения за вчерашний пост-инцидент , я никак недумал что будет такая реакция от вас Iv и Nirth , думал как всегда посмеется народ , прошу прощения , в знак признательности сделал этот скрипт для отлова двойного нажатия . P.S. С уважением Denis12" );
		//////////////
	}
};
///////////////////////////////////////////
function DoubleClic() {
	_root.zz += z;
	updateAfterEvent();
}
setInterval(DoubleClic, 10);

P.S.2. А вот Король другое дело , давно руки чешутся по короне врезать так чтоб все рубины осыпались ...
__________________
Вильгельм Тель...........

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
- наконец-то мы вступили на твердую почву скрипта.
в общем, вместо твоего кода достаточно было воткнуть мой класс и написать вот это:
Код:
org.dembicki.DoubleClick.addListener(_root.mc);
_root.mc.onDoubleClick = function() {
 if (this.hitTest(_root._xmouse, _root._ymouse)) {
  trace("Прошу прощения за вчерашний пост-инцидент , я никак недумал что будет такая реакция от вас Iv и Nirth , думал как всегда посмеется народ , прошу прощения , в знак признательности сделал этот скрипт для отлова двойного нажатия . P.S. С уважением Denis12");
 }
};
- не думаю, что это сложно. и это главное.

а теперь предлагаю сравнить результаты.
прошу принять это не за пузомерку, а за дружественное обсуждение различных подходов.
итак,
1.
- твой код для работы использует две долбилки: onEnterFrame и setInterval. это откровенно плохо. т.е. каждый кадр и каждые 10 миллисекунд нагружается комп расчетами вне зависимости от того нужны они или нет. причем одну их них никак не остановить, если не вносить в твой код изменений.
- в моем коде нет долбилок. ни одной.

2.
- твой код использует рутовые переменные, что совсем плохо, давай заглянем в листинг переменных после выполнения твоего кода:
Код HTML:
Variable _level0.DoubleClic = [function 'DoubleClic']
Variable _level0.z = 0
Variable _level0.zz = 0
Variable _level0.zzz = 0
Variable _level0.onEnterFrame = [function 'onEnterFrame']
Movie Clip: Target="_level0.mc"
Variable _level0.mc.onMouseDown = [function 'onMouseDown']
имеем: три переменных непонятного назначения, рутовый onEnterFrame и onMouseDown навешеный на мувик.
- что в этом плохого?
по-порядку:
Читая код, обнаруживаю DoubleClic и с удивлением вижу, что это не класс, а рутовая функция. Почему с удивлением? Если вы задаете этот вопрос, то вам срочно нужно купить книжку по программингу. Есть такая штука: правила именования. Имена классов задаются с большой буквы. Имена методов с маленькой. Если есть конструкции, в которых можно поступать двояко, например, именовать переменные вот так: my_variable или так: myVariable, то именование классов с большой буквы, а методов с маленькой - просто аксиома, давно не подлежащая никакой ревизии и обсуждению. помимо прочего наличие данного метода в руте нарущает принципы сокрытия реализации, об этом в следующем пункте. и твой DoubleClic я бы всё-таки переименовал в doubleClick.
- переменные z, zz, zzz. Имена переменных ничего не скажут человеку, который заглянет в листинг переменных. Зачем они нужны? Где и как используются? Что они делают в руте? Откуда они там взялись?
Есть такое понятие - универсальность и реюзабельность кода.
Это когда ты пишешь код один раз и затем юзаешь его в различных проектах. Это правильно, писать реюзабельный код. Ты экономишь собственное время, а следовательно можешь сделать (заработать) больше. Но, чтобы писать такой код, нужно знать и понимать, какие требования предъявляются к такому коду.
Ести в коде ты используешь рутовые переменные, то другой код, также использующий рутовые переменные, снесет твой проект напрочь.
Отсюда принцип: код должен быть самодостаточным, сам в себе. Наружу должно торчать только то, что ты хочешь, то, что действительно необходимо. Всё остальное должно быть скрыто и недоступно для случайного изменения.
- _root.onEnterFrame. я уже лет пять не использовал такую конструкцию. Она противоречит всему, чему только можно. И предыдущему пункту - ее может снести любой и требованиям производительности и... ну это трудно объяснить... короче если я вижу такую конструкцию в проекте кандидата на вакансию, то у него нет шансов.
- _root.mc.onMouseDown может быть самая правильная конструкция в твоем коде, но она тоже неправильна. Ты навешиваешь на мувик обработку стандартного события, соответственно, при этом, ты занимаешь ее и нет никакой возможности иначе обработать это событие в дальнейшем, если это понадобится.

Это по листингу кратенько прошлись.
Самое же неприятное кроется в том, чего в листинге нет: задан setInterval, который долбит и долбит и, твой код, будучи однажды запущеным не остановить ничем и никак.

давай теперь посмотрим, что живет у меня:
Код HTML:
Global Variables:
  Variable _global.org = [object #1, class 'Object'] {
    dembicki:[object #2, class 'Object'] {
      DoubleClick:[function 'DoubleClick']
    }
  }
Movie Clip: Target="_level0.mc"
Variable _level0.mc.onDoubleClick = [function 'onDoubleClick']
- задан класс, который находится по адресу, стандартному для подобных AS2 классов. Хоть класс и не AS2, я могу быть увереным, что никто его случайно не снесет. В листинге ты не увидишь, никаких переменных. Ты также не сможешь изменить время даблклика например на строку:
Код:
org.dembicki.DoubleClick._time = "hello world";
Поскольку обработчик не пропустит такую конструкцию.
хехе... кстати, он не пропустит вообще ничего, потому, что я вместо addProperty написал setProperty. поправлю ща...
Да, так вот... Несмотря на то, что я намеренно не использовал типизацию данных, это вовсе не значит, что значения и типы данных не проверяются. Время даблклика можно задать только через setter и нет возможности случайно переопределить переменную interval_time.

Я говорил, что этот класс легко переделать в AS2, давай глянем:
Код:
class org.dembicki.DoubleClick {
	
 private static var interval_time:Number = 300;
 private static var last_time:Number=0;
 
 public static function get _time ():Number {
  return interval_time;
 }
 public static function set _time (value:Number):Void {
  if (interval_time<50 || interval_time>3000) return;
  interval_time = value;
 }
 
 private static var _listeners:Array;
 public static function addListener (obj:Object):Boolean {
  AsBroadcaster.initialize(DoubleClick);
  Mouse.addListener(DoubleClick);
  DoubleClick.addListener(obj);
  return false;
 }
 
 private static function onMouseUp ():Void {
  if ((getTimer()-last_time)<interval_time) {
   DoubleClick.broadcastMessage("onDoubleClick");
  }
  last_time = getTimer();
 }
 
 public static function removeListener (obj:Object):Boolean {
  return false;
 }
 
 private static function broadcastMessage ():Void {}
}
- я потратил меньше 3х минут на это.

Это, собственно, был разбор отличий представленных вариантов.
Если уж и приходится писать код, даже "чисто для себя" (правда мне этот подход совсем непонятен - за что себя так люди ненавидят, что пишут для себя плохой код, а для других хороший...), так даже чисто для себя стоит писать хорошо. Это выгодно.
А уж если возникает необходимость код показать кому-то, то тем более стоит обращать внимание как на правила хорошего тона при написании кода, так и на универсальность и объективность.

PS:
Возможно, многое из того, что я сейчас пишу тебе не так понятно как мне или не кажется таким важным. Это нормально. Но. Маленькая история:
Когда я только начинал программить, я, первый в мире, написал функцию skew (неделю бился над ней) и тут же на радостях запостил ее во flashcoders. Роберт Пеннер её слегка переписал и запостил в эху, в ответ мне, с комментом, что вот в таком виде эта функция будет более ООП-истой. Я тогда даже не догнал о чем речь. Догнал значительно позже, когда начал встречать в сети исходники и эффеекты построенные на моей математике, в которых люди горячо благодарили Роберта за функцию skew. Ну и что мне было делать? Бегать по сети и орать, что на самом деле автор я? Бред.
А вот если бы я сразу написал правильно, в соответствии с принципами OOP, то эта волна пошла бы под моим именем. И я бы был известен как Роберт, работал бы в Майкрософте, на работу ходил бы с охраной, потому, что поклонницы не давали бы проходу, ездил бы на феррари... во размечтался.. аа..

Старый 10.06.2006, 21:00
Nidl вне форума Посмотреть профиль Отправить личное сообщение для Nidl Найти все сообщения от Nidl
  № 37  
Ответить с цитированием
Nidl

Регистрация: Mar 2006
Сообщений: 353
Перед классом skew у тебя был класс tween =) ты еще на форуме его показывал )

Iv я еще и раньше знал что до твоего уровня мне еще нужно время =)
"Долбилка" и у тебя есть , иначе ты бы несмог управлять временным участком за интервал которого необходимо кликнуть 2 раза =)

P.S. а вообще я незнаю кого слушать , одни говорят _root плохо другие стараются избегать _global , во всяком случае ясно одно необходимо знание что-бы понимать что когда и где лутше =)
__________________
Вильгельм Тель...........

Старый 10.06.2006, 21:03
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 38  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
_root и _global плохо.
все что можно хранить в global это классы.
все что должно быть в _root Это мувиклипы и текстовые поля.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 10.06.2006, 21:06
Nidl вне форума Посмотреть профиль Отправить личное сообщение для Nidl Найти все сообщения от Nidl
  № 39  
Ответить с цитированием
Nidl

Регистрация: Mar 2006
Сообщений: 353
если это плохо то остается только this и _parent , эх...тяжело жить дальше =)
постараюсь запомнить : классы в _global ах... все равно я их делать неумею =)
мувики и текстовые поля в _root

Ааа остальное то куда ?
__________________
Вильгельм Тель...........


Последний раз редактировалось Nidl; 10.06.2006 в 21:08.
Старый 10.06.2006, 21:08
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 40  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
_parent я бы тоже не назвал хорошей OOП практикой. остается только this =) но поверь мне этого совсем не мало.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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