Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Сценарии в MMB » Скрипт секундомера
Скрипт секундомера
as-masterДата: Воскресенье, 07 Сентября 2008, 21:22 | Сообщение # 1
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Кто предложит умный скрипт для секундомера?

Задание: есть две кнопки - Старт и Стоп. (Пожалуй, три - еще Сброс).
Есть текстовый объект Text для вывода времени. Есть объект Script. Всё!


Да пребудет с вами ММВ!
 
DordexДата: Воскресенье, 07 Сентября 2008, 22:55 | Сообщение # 2
Необукер
Группа: Проверенные
Сообщений: 533
Репутация: 16
Награды: 9
Статус: Offline
Вот:
Прикрепления: 3656627.mbd (8.9 Kb)


Сообщение отредактировал Омар - Воскресенье, 07 Сентября 2008, 23:10
 
as-masterДата: Понедельник, 08 Сентября 2008, 00:35 | Сообщение # 3
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Хотелось бы:

1. Сотые доли секунд видеть, иначе смысла в секундомере нет.
2. Иметь только ОДИН текстовый объект.

Слабо? smile


Да пребудет с вами ММВ!
 
DordexДата: Понедельник, 08 Сентября 2008, 00:36 | Сообщение # 4
Необукер
Группа: Проверенные
Сообщений: 533
Репутация: 16
Награды: 9
Статус: Offline
Честно говоря для меня слабо? cry
 
as-masterДата: Понедельник, 08 Сентября 2008, 01:09 | Сообщение # 5
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (Омар)
для меня слабо?

Это вопрос или утверждение? smile

Вообще, что-то все расслабились, всего один человек и откликнулся на вопрос.
А вопрос по сути не такой уж и сложный. Просто хотелось тут видеть несколько
РАЗНЫХ решений, это всегда интересно. Так и находится лучший путь.

Надеюсь, на неделе другие участники форума тоже откликнутся.


Да пребудет с вами ММВ!
 
skДата: Понедельник, 08 Сентября 2008, 11:30 | Сообщение # 6
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Quote (as-master)
Слабо?

Дело не в этом. Самый затруднительный момент для меня оказался - это сотые...
а точнее, тысячные...
Фишка в том, что если делать отсчёт не по секундам, а по десятым или сотым (и тем более
уж по тысячным!), то секундомер получается неточным. Секунды начинают отставать от
реального времени. (Не знаю как у вас, но я долго экспериментировал с разными командами
MMB, и везде результат был одинаковый. Ниболее точным шагом оказались 1000мс. Они шли ровно,
даже если насиловать процессор и пр.)
Немного поломав голову, я придумал один интересный (может даже и авантюрный)
вариант.

Хочу в защиту написать пару преимуществ данного секундомера.
Первое - это то, что он достаточно устойчив к загруженности процессора. (Специально издевался
над компом - секунды шли не отставая)
Второе - реализован отсчет до тысячных. И это не предел, при желании можно сделать и больше
цифр после запятой. (Правда, это уже полное безумие.)
Ещё, надо сказать, что скрипт отсчёта секунд и отрисовки их на табло я сделал процессами
независимыми друг от друга. Я посчитал, что это важный момент.

Короче, вот, что у меня получилось.

Прикрепления: stopwatch.mbd (15.7 Kb)
 
as-masterДата: Понедельник, 08 Сентября 2008, 11:37 | Сообщение # 7
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Дорогой мой друг sk, если бы эта задачка была совсем уж простенькой,
я бы и не задавал тут вопроса :)))))))

Добавлено (08 Сентябрь 2008, 11:36)
---------------------------------------------
А за проект тебе большой жирный ЗАЧЁТ!!!
Я его детально посмотрю и поизучаю попозже, после чего непременно выложу на сайт.
Хорошая работа, мне понравилось smile

Одна просьба: изложить кратенько принцип работы твоего варианта программы.
Что в ней необычного, как это вообще работает.

Добавлено (08 Сентябрь 2008, 11:37)
---------------------------------------------
И последнее - насчет тысячных долей я перегнул, по ошибке.
Обычно довольствуются сотыми долями (в спорте, например).


Да пребудет с вами ММВ!
 
toizyДата: Понедельник, 08 Сентября 2008, 11:44 | Сообщение # 8
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (sk)
Самый затруднительный момент для меня оказался - это сотые...
а точнее, тысячные...

имейте в виду, что системный таймер считает тысячные отвратительно. Для рассчёта тысячных нужно использовать таймер мультимедийный, к которому доступа из ММВ нет


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Понедельник, 08 Сентября 2008, 11:46 | Сообщение # 9
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Дима, ты посмотри сначала проект Сергея - всё работает офигительно.

Да пребудет с вами ММВ!
 
skДата: Понедельник, 08 Сентября 2008, 11:58 | Сообщение # 10
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Quote (as-master)
Как это вообще работает?

А хрен её знает!!! )))

Вся штуковина в том, что секунды идут своей дорогой, миллисеки - своей, но зависимо от
секунд, а табло - своей.

Появляется секунда - начинается отсчет в scr_counter (счётчик), появляется следующая секунда -
начинается новый отсчёт в счётчике и тут же вычисляется среднее арифметич. предыдущего показателя
с новым показателем. Этот средний показатель счётчика является неким потолком в текущем континиуме.
Для чего он нужен: зная верхний максимум, мы легко высчитываем из этого ТЕКУЩИЕ сотые, тысячные
(хоть миллионные). По простой формуле, используя проценты. И получается, что с каким бы шагом не шагали
секунды, то тысячные на любом компьютере, при любой загрузке процессора всегда будут высчитаны. Лишь бы
сами секунды шли ровно. (Хотя их я мучил по-всякому - вроде бы всё нормально.)
Ещё там можно задать время отрисовки табло, но это уже не так важно...

 
skДата: Понедельник, 08 Сентября 2008, 13:43 | Сообщение # 11
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Вот тот же проект, только с комментариями в коде. Так будет легче сообразить что к чему.
Ещё вывел параметр счётчика на табло для наглядности. Видно, как он варьируется в
зависимости от загруженности ЭВМ. Достаточно забавно выглядит. Я даже сразу и не сообразил,
но ведь получился абсолютно честный FPS мультибилдерского приложения. )

Конечно, если прога потребуется по своему прямому назначению, то лучше собрать exe без
комментариев. Лишнюю грязь надо всегда того...! (FPS будет выше!)))

Прикрепления: stopwatch_comme.mbd (18.1 Kb)
 
toizyДата: Понедельник, 08 Сентября 2008, 15:23 | Сообщение # 12
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (as-master)
всё работает офигительно

Офигительно, но миллисекунды считаются неправильно! я о чём - в лучшем случае до 1/10 секунды, если мельче, то результату таймера уже не стоит доверять


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Понедельник, 08 Сентября 2008, 15:36 | Сообщение # 13
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (sk)
Вот тот же проект, только с комментариями в коде.

Прекрасно! Для сайта как раз самое то.
Сергей, еще ридмишку напиши к проекту и мне вышли.
Либо тут выложи.

Quote (sk)
получился абсолютно честный FPS мультибилдерского приложения

Забавно! Нужно эту тему подробнее обсудить.

Quote (sk)
если прога потребуется по своему прямому назначению, то лучше собрать exe без
комментариев.

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

Quote (toizy)
миллисекунды считаются неправильно

В сущности, одной десятой вполне достаточно для бытового назначения smile


Да пребудет с вами ММВ!
 
toizyДата: Понедельник, 08 Сентября 2008, 19:17 | Сообщение # 14
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (as-master)
А вот влияют ли на
загрузку компьютерных ресурсов

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


Жизнь оказалась не такой уж и забавной, как поначалу...
 
skДата: Понедельник, 08 Сентября 2008, 20:08 | Сообщение # 15
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Quote (toizy)
Миллисекунды считаются неправильно!

Согласен, что там они приблизительные, по ситуации. Однако, думаю, что вполне должны
совпадать с настоящими. Это оказался единственный способ для MMB (по крайней мере
я лучше способа не придумал.) Может, кто-нибудь ещё что-нибудь предложит? Посмотрим.

Quote (as-master)
достаточно для бытового назначения

Я тож так думаю. Не олимпийские же результаты засекать! ) Если нужен серьёзный секундомер,
то и делать его нужно, наверно, не в MMB. А здесь, думаю, сойдёт - поиграться самое то.

Quote (as-master)
еще ридмишку напиши к проекту

ok. Там описать, как работает скрипт? А ещё чего-нибудь надо?
 
as-masterДата: Понедельник, 08 Сентября 2008, 21:21 | Сообщение # 16
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (sk)
Там описать, как работает скрипт? А ещё чего-нибудь надо?

Напиши, что считаешь нужным - ты ведь автор (это тоже не забудь указать!)
Я просто вложу твой текстовый файл в архив с проектом.


Да пребудет с вами ММВ!
 
Oleg_88Дата: Понедельник, 26 Декабря 2011, 23:21 | Сообщение # 17
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Тема старовата, но всё же напишу здесь. Взял из второго поста пример секундомера и попробывал поставить его в свойства страницы, чтобы сам при запуске начинал считать, работает, потом копирую и вставляю ещё раз все элементы и запускаю параллельно с первым не работает. Для второго секундомера все метки переписал, даже все переменные отличаются от оригинала всеравно работает не правильно. По идее стали два совершенно разные секундомера. Если запускаешь второй то первый останавливается и наоборот. Как сразу два запустить что бы они вместе работали так и не смог сделать:(
 
YURIYДата: Вторник, 27 Декабря 2011, 00:46 | Сообщение # 18
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
В тему вызываются телепаты.


Вечная память Андрею Сергееву!
 
Oleg_88Дата: Вторник, 27 Декабря 2011, 01:31 | Сообщение # 19
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Объяснить наверно трудно будет, вот два в одном
Прикрепления: 27.rar (2.4 Kb)
 
YURIYДата: Вторник, 27 Декабря 2011, 01:56 | Сообщение # 20
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Прочитайте ВНИМАТЕЛЬНО в справке про команду ScriptTimer и всё поймёте.


Вечная память Андрею Сергееву!
 
Oleg_88Дата: Среда, 28 Декабря 2011, 22:41 | Сообщение # 21
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Danke

Добавлено (28 Декабрь 2011, 22:41)
---------------------------------------------
Если честно у меня так и не получилось одновременно запустить два секундомера. Разместил на верхний уровень, сделал вот так

ScriptTimer("Timer2=Master Layer::Script","0")
ScriptTimer("Timer1=Master Layer::Script1","0")
думаю здесь что то надо дописать или исправить, почему то срабатывает только верхняя строка, может пишу что то с ошибкой. Много вариантов перепробывал, но так и не нашел правильного решения.

 
YURIYДата: Четверг, 29 Декабря 2011, 00:01 | Сообщение # 22
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Я в Вашем проекте прописал для каждого секундомера имена для двух таймеров, упоминающихся по два раза. Итого - прописать в четырёх местах, больше ничего не нужно.


Вечная память Андрею Сергееву!
 
Oleg_88Дата: Четверг, 29 Декабря 2011, 00:43 | Сообщение # 23
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Вы имели в виду вот это
ScriptTimer("TIMER1=Script1","0")
Я подписывал имена таймерам, в кнопках и в "скриптах", но кнопки почему то останавливают друг друга или я не о том
 
Alex3AДата: Четверг, 29 Декабря 2011, 01:21 | Сообщение # 24
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (Oleg_88)
ScriptTimer("TIMER1=Script1","0")

Слово ScriptTimer состоит из двух слов, скрипт и таймер.
А таймер фсе же, предполагает какую либо задержку, а у тебя она 0.
Задержку менее 50 ставить безсмысленно, и при написании скриптов нуна думать еще и головой, и учитывать не только сам код, но и время его выполнения.
ММВ не имеет так называемых паралельных процессов, типа что бы что то выполнялось одновременно. Есть то что типа называется полупаралельным процессом. Винда вообще, событийно ориентированная штука, основанная на сообщениях, которые записываются в очередь и выполняются последовательно, при этом, однотипные сообщения она может просто проигнорировать. Вот у тебя все и останавливает. Невозможно одновременно таскать и в зад и вперед. :D
 
YURIYДата: Четверг, 29 Декабря 2011, 15:45 | Сообщение # 25
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Oleg_88)
Я подписывал имена таймерам, в кнопках и в "скриптах", но кнопки почему то останавливают друг друга


Блин, да как там может не получиться, не пойму...

Берёте вот этот проект:

Quote (Oleg_88)
Прикрепления: 27.rar(2Kb)


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

Что может быть проще?

Quote (Alex3A)
Вот у тебя все и останавливает.


Алекс, ну что такое ты говоришь... Я пишу выше, как исправить проблему, а ты мне противоречишь. Попробуй сам, если не веришь, всё прекрасно работает.



Вечная память Андрею Сергееву!
 
Oleg_88Дата: Пятница, 30 Декабря 2011, 22:46 | Сообщение # 26
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Наверно остаётся толко показать что я сделал. Оставил как есть, вот это в кнопке
Code
If (runZ=0) Then
runZ=1
ScriptTimer("TIMER1=Script1","0")
Return()
End
If (runZ=1) Then
runZ=0
End

это в самом скрипте
Code
ScriptTimer("TIMER1=Script1","1000")

во втором секундомере так,
Code
ScriptTimer("TIMER2=Script","0")
ScriptTimer("TIMER2=Script","1000")

время тоже менял, что то тоже не получается, если у Юры работает, то наверно я где то неправильно написал.

Добавлено (30 Декабрь 2011, 22:46)
---------------------------------------------
Юрий, я неправильно обозвал таймеры или причина в ещё в чём то?
 
YURIYДата: Суббота, 31 Декабря 2011, 00:08 | Сообщение # 27
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Приложил проект - он работает у Вас?

Да, кстати! Версия MMB последняя стоит, я надеюсь?

Добавлено (31 Декабрь 2011, 00:08)
---------------------------------------------
Quote (YURIY)
Да, кстати! Версия MMB последняя стоит, я надеюсь?


Всё ясно. Вижу - Ваш проект более старой версии. Вы ж читайте внимательно в справке - эти 1000 таймеров были введены в последней версии! До этого, то есть - в Вашем варианте, их нужно обзывать A, B, C (см. help). А лучше скачать новую.
Прикрепления: 27.zip (2.5 Kb)



Вечная память Андрею Сергееву!
 
Oleg_88Дата: Суббота, 31 Декабря 2011, 02:55 | Сообщение # 28
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
Да у меня уже очень долго 4.9.7 стоит, у себя тоже исправил на буквы и всё пошло, спасибо.
 
Форум MMB » Всё о программе Multimedia Builder » Сценарии в MMB » Скрипт секундомера
  • Страница 1 из 1
  • 1
Поиск: