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


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

> Описание: Холиварные споры.
-dead- Post Id


Президент


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



Выделено в отдельную тему из темы "Добавить массивы"
Admin пишет:
Это не ошибки, это стандартный практически для всех языков программирования способ обработки событий. Как бы Вы по другому управляли автомобилем в Вашей игре? Многократно нажимая на одну и ту же клавишу? А проблема, которую Вы описываете, решается уменьшением приращения.

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

Если не прав - извините Смущение
 
 Top
Admin Администратор Post Id


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


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



Выделено в отдельную тему из темы "Добавить массивы"
-dead- пишет:
Возможно у вас склеены понятия "Наступило событие нажатия клавиши" и "В данный момент клавиша нажата"


Вы совершенно правы. Я бы даже сказал, что они не склеены, а есть только обработка события "в данный момент нажата клавиша".

cjA пишет:
ну почему Вы не хотите отказаться от этого полуматематического языка?
и от скобок этих Сишных дурацких?


От фигурных скобок, возможно, и стоит отказаться. Правда, дурацкой я бы не стал называть одну из самых распространенных синтаксических конструкций. Улыбка

cjA пишет:
Вашему транслятору намного дольше было бы


GameLogo не транслятор. Это интерпретатор.

cjA пишет:
начать условие 1
если расстояние меньше 40 то
если машина.у - грузовик.у меньше 80 то звук bom.wav --зачем тут "="?
конец условия 1


Это очень спорно с методической точки зрения.

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

cjA пишет:
у Вас же тут же и проблемма с программными скобками исчезла бы?


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


Президент


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



Выделено в отдельную тему из темы "Добавить массивы"
Мелкая поправка, "В данный момент клавиша нажата" - это не событие, это свойство.
 
 Top
Admin Администратор Post Id


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


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



Выделено в отдельную тему из темы "Добавить массивы"
Для клавиши - свойство. Для среды исполнения - событие (исполнителем выступает черепаха). Улыбка
В GameLogo нет целостной объектной модели. Есть только черты объектного подхода, необходимые для знакомства с методами, свойствами и событиями.
При этом возникновение какого-либо события в результате изменения каких-либо свойств пока не реализовано. В дальнейшем, возможно, программно неизменяемое свойство черепахи "датчик" будет связано с событием изменения значения датчика. Но пока не ясно, стоит ли это делать в рамках GameLogo.
 
 Top
-dead- Post Id


Президент


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



Выделено в отдельную тему из темы "Добавить массивы"
Ну если события не реализованы - значит просто всё через свойства. Замешательство

ИМХО - детей только путать на будущее, если свойства называть событиями... Смущение
 
 Top
uiouio Post Id


Рядовой


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



Выделено в отдельную тему из темы "Добавить массивы"
Рад продолжению дискуссии.

Рассуждая про свойство клавиши "нажата" и событие "нажата клавиша", ушли в сторону от понимания описанной проблемы. А именно, при нажатии на клавишу обработчик ли события или черепашка, анализируя свойство клавиши, должен выполнятся некий код. В данном случае код - уменьшение значения переменной на 1. Клавиша не удерживается нажатой, это однократной нажатие. Текущий код исполнения программы прерывается обработчиком события, после обработки, указатель выполняемой инструкции снова возвращается на следующую команду после прерванной. На деле выглядит так, что код обработчика события выполняется несколько раз, так как не происходит возврата к другим инструкциям (хм, честно говоря, это надо проверить точно, но визуально это так).

Возникает вопрос, что является окончанием многих повторов выполнения кода обработки?
Если это некий промежуток времени, в течение которого проявляется свойство нажата ли клавиша, то такой подход не корректен с точки зрения предсказуемости и повторяемости. Раньше под ДОС, да и сейчас под любую ОС этому служил буфер ввода клавиатуры. Т.е. обработчик прерывания клавиатуры операционной системы помещал в некий буфер коды нажатых клавиш и, уверяю вас, при однократном нажатии там будет одна порция (2 байта для одного нажатия клавиш-стрелочек).
Дальше на усмотрение программиста: обрабатывать ли весь буфер или только часть, а остальное стереть.

В данном случае, мне непонятно как работает обработчик.

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

Кстати, если говорить о последнем пожелании, "потерянном символе", то это должна быть возможность повторять код, т.е. функции и процедуры. Предвидя возможные возражения со стороны разработчика, могу сказать что макросы очень даже подойдут. Т.к. это не требует изменения интерпретатора вообще - добавляется лишь пред-стадия обработки (замена объявления макросов в коде в текст макросов). Что-то типа:

МАКРОС ААА
<текст>
КОНЕЦ МАКРОСА

и условия, что внутри не должно быть объявления переменных. Не надо рекурсий, областей видимости и пр. Используя глобальные переменные и макросы можно даже получить аналог процедур.
 
 Top
-dead- Post Id


Президент


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



Выделено в отдельную тему из темы "Добавить массивы"
Если в языке есть функция получения времени, то можно самому написать правильную обработку нажатий, аналогичную генерации нажатий клавиш в современных ОС (первое нажание сразу, второе через некоторое время и потом частые нажатия с интервалом).
 
 Top
Admin Администратор Post Id


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


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



Выделено в отдельную тему из темы "Добавить массивы"
-dead- пишет:
Ну если события не реализованы - значит просто всё через свойства.


Это как?

-dead- пишет:
ИМХО - детей только путать на будущее, если свойства называть событиями...


А Вы как предлагаете называть то, что возникает (имеет быть) в случае нажатия на клавишу? гы-гы!

uiouio пишет:
Возникает вопрос, что является окончанием многих повторов выполнения кода обработки?


Отпускание клавиши.

uiouio пишет:
В данном случае, мне непонятно как работает обработчик.


Данный код наглядно демонстрирует принцип обработки.

повторить пока 1 = 1 {
пиши 1
пауза 100
пиши 2
пауза 100
}

событие нажата клавиша 39 ' стрелка вправо
направо 90
пауза 500
конец события

событие нажата клавиша 38 ' стрелка вверх
вперед 100
пауза 500
конец события


uiouio пишет:
возможность повторять код, т.е. функции и процедуры

uiouio пишет:
макросы очень даже подойдут


Да, это важная вещь, по мере возможностей она будет добавлена.
 
 Top
-dead- Post Id


Президент


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



Перенесено из темы "Добавить массивы"
Admin пишет:
А Вы как предлагаете называть то, что возникает (имеет быть) в случае нажатия на клавишу?

Скорее всего то, что у вас есть - это свойство "нажатости" конкретной клавиши клавы Улыбка

Т.е. System.getIsPressed("A"Подмигивающий - Это извлечение свойства "нажатости" клавиши "А".

А на события нужно регистрировать обработчики. Cкажем, если бы у вас было:

System.registerEventHandler(btn_Pressed, &my_Handler)
и при этом &my_Handler это ссылка на функцию типа "my_Handler(char btn)", и она бы потом вызывалась при нажатии любой кнопки - вот тогда нажатие кнопки было бы событием Улыбка

Это если не делать полноценный ООП и перегрузку методов Улыбка

PS: И почему если закрывающую скобку ) написать после кавычки ", то она становится смайликом? Тащусь
(Добавление)
PPS: А вообще я уже занудствую Улыбка

(Отредактировано автором: 20 Июня, 2011 - 20:30:23)

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


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


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



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


То, что реализовано в GameLogo в конструкции вида


событие нажата клавиша N

- - - - -

конец события


называется обработчиком события.


-dead- пишет:
Т.е. System.getIsPressed("A" - Это извлечение свойства "нажатости" клавиши "А".

А на события нужно регистрировать обработчики. Cкажем, если бы у вас было:

System.registerEventHandler(btn_Pressed, &my_Handler)
и при этом &my_Handler это ссылка на функцию типа "my_Handler(char btn)", и она бы потом вызывалась при нажатии любой кнопки - вот тогда нажатие кнопки было бы событием

Это если не делать полноценный ООП и перегрузку методов


Есть подозрение, что детям это не стоит объяснять сразу же при начальном знакомстве с программированием. Улыбка
 
 Top
-dead- Post Id


Президент


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



Перенесено из темы "Добавить массивы"
хм, странно, ну тогда это наверное почти полноценные события, а как часто вызывается этот код?
 
 Top
Admin Администратор Post Id


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


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



Перенесено из темы "Добавить массивы"
С момента нажатия клавиши и до момента ее отпускания. Количество вызовов при этом лимитируется скоростью выполнения кода в обработчике события. Если необходимо реализовать одиночный вызов, то в конец кода в обработчике события можно добавить команду пауза <число миллисекунд>.
 
 Top
-dead- Post Id


Президент


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



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

Вот! Это и есть проблема! Событие должно возникать столько раз, сколько оно возникает, а не столько, сколько успеет захавать обработчик Улыбка иначе это не сильно отличается от свойства Улыбка чтобы обработка была правильной - можно запоминать время последнего вызова обработчика и не вызывать его второй раз, пока не пройдёт какое-то время или не будет отпущена и снова нажата клавиша.
 
 Top
Admin Администратор Post Id


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


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



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


Для программирования простого управления объектами-картинками на экране способ, который выбран в GameLogo, является наиболее удобным. А именно, повторный вызов кода обработчика события наступает после завершения выполнения предыдущего вызова. Это обеспечивает отсутствие неприятной дискретности в управления картинкой-объектом на экране. При этом количество различных видов событий сведено всего к одному. Выбор этого способа продиктован общей концепцией GameLogo - упрощением программирования простых динамических игр (отсюда и название).
 
 Top
-dead- Post Id


Президент


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



Перенесено из темы "Добавить массивы"
Ну не буду дальше упорствовать, хотя по прежнему не понял, почему количество обрабатываемых событий должно всегда напрямую зависеть от времени обработки одного события Смущение как-то это противоестественно с точки зрения идеологии событий.
 
 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