роботы робототехника микроконтроллеры


 Страниц (7): « 1 [2] 3 4 5 6 7 »   

> Описание: Холиварные споры.
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



Перенесено из темы "Добавить массивы"
-dead- пишет:
по прежнему не понял, почему количество обрабатываемых событий должно всегда напрямую зависеть от времени обработки одного события


Выше уже написал. Выбор такого способа продиктован целью устранения неприятной дискретности в управлении картинкой-объектом на экране.

Вот пример кода.

картинка шар1
картинка шар2

шар1 = BALL.BMP
шар2 = BALL.BMP

шар1.место 200, 200
шар2.место 500, 200


событие нажата клавиша 37 ' стрелка влево
шар1.вперед 10
шар1.налево 10
конец события

событие нажата клавиша 39 ' стрелка вправо
шар2.вперед 10
шар2.направо 10
конец события


Попробуйте нажать две клавиши одновременно и посмотрите, что будет получаться.
Если же Вы хотите посмотреть, как будет работать этот код при реализации Вашего подхода, то нажмите кнопку "Настройки" и выключите режим Турбо.

(Добавление)

-dead- пишет:
как-то это противоестественно с точки зрения идеологии событий


Насколько я понимаю, никакой идеологии событий не существует, есть только подходы в реализации, которые обычно называют парадигмами программирования. Например, Вы пытаетесь рассматривать парадигму ООП как единственно правильную. Я же считаю, что подход, реализованный в GameLogo, является более стандартным и верным для тех задач, которые он решает. Вообще спор о преимуществах или недостатках парадигм программирования относится к холиварным спорам. Мне кажется, вся эта дискуссия идет несколько оффтопом в этой ветке. Я предлагаю все это удалить, если Вы не возражаете, и закончить, эту тему. Или можно перенести все в отдельную ветку и продолжить в ней.
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Перенесено из темы "Добавить массивы"
Admin пишет:
Попробуйте нажать две клавиши одновременно и посмотрите, что будет получаться. Если же Вы хотите посмотреть, как будет работать этот код при реализации Вашего подхода, то нажмите кнопку "Настройки" и выключите режим Турбо.

Попробовал. Без турбо это ни разу не мой подход Улыбка оно вообще перестает генерировать события нажатия клавиш в этом случае, а я говорил, что корректно генерировать их с какой-то частотой, но не зависящей от времени обработки одной команды.

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

PS: Но если вы знаете какие-то примеры, где события генерируются с частотой, прямо зависящей от скорости их обработки - скажите, потому что я раньше не видел такого нигде.

PPS: И вообще у меня ощущение, что может у вас и в целом уже сейчас всё правильно, у вас этот шарик в примере с одинаковой скоростью будет крутиться на компьютерах с разным быстродействием?

(Отредактировано автором: 21 Июня, 2011 - 08:41:14)

 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Перенесено из темы "Добавить массивы"
Из WinAPI

    Нажатие клавиши заканчивается сообщением WM_KEYDOWN или WM_SYSKEYDOWN, помещаемое в очередь сообщений потока, связанного с окном, которое имеет фокус клавиатуры. Отпуск клавиши заканчивается сообщением WM_KEYUP или WM_SYSKEYUP, помещаемым в очередь.

    Действия "клавиша отпущена" и "клавиша нажата" посылают сообщения, которые обычно происходят попарно, но если пользователь удерживает нажатой клавишу достаточно долго, чтобы запустить функцию клавиатуры автоматического повторения, система генерирует ряд сообщений WM_KEYDOWN или WM_SYSKEYDOWN. Она затем генерирует единственное сообщение WM_KEYUP или WM_SYSKEYUP, когда пользователь отпускает клавишу.


Поскольку ОС делает это самостоятельно, то как обрабатывать эти сообщения это сугубо личное дело программиста

ИМХО в GAMELOGO обработка сообщений от клавиатуры вполне сбалансирована с решаемыми задачами.

(Отредактировано автором: 21 Июня, 2011 - 11:14:40)

 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Перенесено из темы "Добавить массивы"
И как соотносится экскурс в WinAPI с GameLOGO? Улыбка я так понимаю там совсем не эти сообщения используются... Смущение
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Перенесено из темы "Добавить массивы"
-dead- пишет:
И как соотносится экскурс в WinAPI с GameLOGO? Улыбка я так понимаю там совсем не эти сообщения используются... Смущение


А какие? от LINUX Улыбка
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Перенесено из темы "Добавить массивы"
Ну если бы они использовали эти сообщения - там бы чуток по другом всё работало, мне так кажется Смущение но давайте дождемся, что скажут разработчики... Закатывать глаза

И уже надо отделить обсуждение событий от массивов не в себе

(Отредактировано автором: 21 Июня, 2011 - 13:19:59)

 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



Перенесено из темы "Добавить массивы"
-dead- пишет:
Вопрос не в преимуществах или недостатках или тем более в холиваре, а в том, что событие - достаточно устоявшийся термин.


В данном случае - уже холивар! Событие для программирования не является термином - это абстрактное понятие. Термином оно может являться только для конкрентного языка программирования и конкретной реализации или группы языков или какой-либо парадигмы пограммирования, что я и пытаюсь Вам объяснить.

-dead- пишет:
Но если вы знаете какие-то примеры, где события генерируются с частотой, прямо зависящей от скорости их обработки - скажите, потому что я раньше не видел такого нигде.


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

Visual C++
C#
Visual Basic.Net
Visual Basic for Application
Delphi
...

-dead- пишет:
И вообще у меня ощущение, что может у вас и в целом уже сейчас всё правильно, у вас этот шарик в примере с одинаковой скоростью будет крутиться на компьютерах с разным быстродействием?


Шарик будет крутиться с разной скоростью на разных машинах.

-dead- пишет:
Ну если бы они использовали эти сообщения - там бы чуток по другом всё работало, мне так кажется


Вам кажется. Используются именно KeyDown и KeyUp вместе с селектором, выполняющим роль стека для отдельных потоков. Таким образом, следующее событие начинает обрабатываться еще до полной обработки предыдущего, что и обеспечивает плавность и независимость управления. Селектор отвечает также за то, чтобы однотипные события при этом не перекрывались. Включается селектор кнопкой "Турбо" в панели управления GameLogo.
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Перенесено из темы "Добавить массивы"
Admin пишет:
Событие для программирования не является термином - это абстрактное понятие. Термином оно может являться только для конкрентного языка программирования и конкретной реализации.

Ну не то чтобы совсем уж абстрактное - http://en.wikipedia.org/wiki/Eve...ven_architecture
Цитата:
An event can be defined as "a significant change in state"


Цитата:
Не генерируются, а обрабатываются. Вы постоянно пытаетесь подменить одну тему другой и перемешать все в кучу. Количество законченных обработок возникновения события при следовании их одно за другим, зависит от скорости обработки в (перечисление кучи платформ)

Вопрос в том, что ни одна из указанных сред разработки не генерит события быстрей, если вы ускорили обработчик событий, а у в GameLOGO, мне кажется, именно такая ситуация. И у меня ощущение, что это не я подменяю одно другим Улыбка

Admin пишет:
Вам кажется. Используются именно KeyDown и KeyUp вместе с селектором, выполняющим роль стека для отдельных потоков. Включается селектор кнопкой "Турбо" в панели управления GameLogo.

Т.е. вы хотите сказать, что при каком-то из режимом "Турбо" вы генерируете столько событий нажатия клавиши, сколько получили стандартных сообщений от ОС? Либо это неправда, либо вы меняете настройки повторного нажатия при старте приложения.
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



-dead- пишет:
Ну не то чтобы совсем уж абстрактное - http://en.wikipedia.org/wiki/Eve...ven_architecture


СОП - это отдельная парадигма программирования. Указанная Вами статья относится не к программированию вообще, а к частной его реализации.

-dead- пишет:
Вопрос в том, что ни одна из указанных сред разработки не генерит события быстрей, если вы ускорили обработчик событий, а у в GameLOGO, мне кажется, именно такая ситуация. И у меня ощущение, что это не я подменяю одно другим


Вы пытаетесь говорить одновременно о генерации событий и об их обработке. И я не совсем понимаю, что Вы имеете в данном случае ввиду под "генерацией".

-dead- пишет:
Т.е. вы хотите сказать, что при каком-то из режимом "Турбо" вы генерируете столько событий нажатия клавиши, сколько получили стандартных сообщений от ОС? Либо это неправда, либо вы меняете настройки повторного нажатия при старте приложения.


Вообще не понял вопроса. Сформулируйте яснее, пожалуйста. В GameLogo пять независимых обработчиков, которые выбираются селектором. Селектор следит за освобождением обработчиков и нагружает их по мере высвобождения. Все, что не успевают обработать обработчики, пропускается.
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Спасибо что отделили ветку от той темы! Одобряю
А то там продолжать уже неприлично было

Admin пишет:
Вы пытаетесь говорить одновременно о генерации событий и об их обработке. И я не совсем понимаю, что Вы имеете в данном случае ввиду под "генерацией".

Это не я пытаюсь одновременно говорить, это они обычно разделены, и между ними есть регистратор событий, а у вас они получается склеены - регистратор и генератор, и событие генерируется и регистрируется не в тот момент, когда оно случилось, а в тот момент, когда у обработчика появилась возможность его обработать.

Мне кажется, что проблема вот тут, как я уже говорил:
Admin пишет:
Количество вызовов при этом лимитируется скоростью выполнения кода в обработчике события.


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

(Отредактировано автором: 21 Июня, 2011 - 15:46:37)

 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



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


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

События винда и так будет генерировать до изнеможения, а обрабатывать их все до одного вовсе не обязательно.
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



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

Я не понял, как вам удалось из "количество событий, не зависящее от скорости обработчика, а зависящее от настроек ОС, типа не более 10 кликов в секунду" получить следствие в виде "отсутствие отрисовки текущего результата" Замешательство

(Отредактировано автором: 21 Июня, 2011 - 16:31:28)

 
 Top
uiouio Post Id


Рядовой


Сообщений всего: 14
Дата рег-ции: Июнь 2011  



Цитата:
С момента нажатия клавиши и до момента ее отпускания. Количество вызовов при этом лимитируется скоростью выполнения кода в обработчике события. Если необходимо реализовать одиночный вызов, то в конец кода в обработчике события можно добавить команду пауза <число миллисекунд>.


Ясно, так и подозревал Улыбка
Учту при написании программ.

P.S. Просто интересно, а почему так? Какая-то задумка или просто выбран один из методов?
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



это киллгура имхо.

2 Админ, давайте уж Ваше решение пикода, как Вы видите - ну вот у кучи робофорумчан есть механизмы которые готовы следовать коммандам gamelogo, но просто комманд не знают. (не понимают, не интерпритируют)

(у меня- влево, вправо, вперед, назад- сделалиже SUN свою джаб-машину- теперь все армы ее поддерживают.)

Как насчет пикода? влево, вправо?
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



-dead- пишет:
событие генерируется и регистрируется не в тот момент, когда оно случилось, а в тот момент, когда у обработчика появилась возможность его обработать.


-dead- пишет:
Мне кажется, что проблема вот тут, как я уже говорил:
Admin пишет:
Количество вызовов при этом лимитируется скоростью выполнения кода в обработчике события.


Да, именно так. И это не проблема, а продуманный способ обработки событий, дающий удобство при программировании динамических игр в GameLogo.

-dead- пишет:
количество вызовов было бы еще ограничено 10 в секунду


Такой подход не дает никаких преимуществ, только неудобства. Чаще всего это бывает необходимо, чтобы избавиться от одной из проблем СОП - дать возможность "перевести дух" машине. В GameLogo таких проблем нет.

killgur пишет:
События винда и так будет генерировать до изнеможения, а обрабатывать их все до одного вовсе не обязательно.


Одобряю Улыбка

uiouio пишет:
P.S. Просто интересно, а почему так? Какая-то задумка или просто выбран один из методов?


Наиболее удобный способ для реализации на медленных машинах. В школах могут быть очень медленные машины. Основные возможности GameLogo по управлению объектами с клавиатуры сносно работают уже начиная с Pentium 1.

cjA пишет:
Как насчет пикода? влево, вправо?


Вы имеете ввиду что-то типа Basic Atom?
 
 Top
Страниц (7): « 1 [2] 3 4 5 6 7 »
« GameLOGO »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru