![]() |
Дельта тайминг
Слышал про это, но не раз в глаза код не видел. Кому не жалко поделитесь знаниями!):)
|
Ответ: Дельта тайминг
|
Ответ: Дельта тайминг
И что? Я тоже искал... КОда я там ни нашёл...ВСё равно спасибо
|
Ответ: Дельта тайминг
Код зависит в каждом конкретном случае непосредственно от кода игры, главное, что нужно понять - то, что необходимо домнажать ключевые действия (вроде перемещения и скорости проигрывания анимации) на некоторую скорость игры, которая должна быть обратно пропорциональна ФПС
|
Ответ: Дельта тайминг
Это я понимаю... Мне нужен пример. Я понимаю что скорость перемещения обьекта нужно будет умножать на Дельту. Каким образом ведётся просчёт... Если не затруднит помогите пожалуйста.
|
Ответ: Дельта тайминг
Код:
... |
Ответ: Дельта тайминг
|
Ответ: Дельта тайминг
Спасибо но у меня тут проблемма.
Вычисляю фпс так: Код:
Function Init_Count_FPS() Ставлю значение дельты перед инициализацие графики в глобалы.. Не работает.. В плане скорость меняется на -1.62354+008... Что делаю не так? |
Ответ: Дельта тайминг
Unodeya
сделай их не целыми |
Ответ: Дельта тайминг
сделал с плавающей точкой. при проверке значения скорости игрока скорость = infinity(бесконечно)
|
Ответ: Дельта тайминг
По-моему, следует сделать так:
deltatime = 60.0 / Init_Count_FPS() Потому что у тебя FPSCount является локальной переменной твоей функции |
Ответ: Дельта тайминг
FPSCount обозначена как глобальная переменная. А делить число на функцию, это что-то новое)) В любом случае не получилось.. Что-то не так.. Есть у кого нибудь маленький примерчик уже со счётчиком и каким нибудь обьектом? Помогите пожалуйста...
|
Ответ: Дельта тайминг
Цитата:
Неприходила мысть просто подумать логически? - Что такое фпс? Это число кадров в секунду. - Что нужно сделать чтобы его узнать? Сосчитать кадры сделаные за секунду! - Как сосчитать? Тупо fps=fps+1 в конце каждого кадра - Но считать нужно в течении секунду, как это сделать? Запоминает в переменную текущее время fps_time=Millisecs() Потом проверяем если Millisecs() - fps_time>=1000 то прошла секунда и в переменной fps у нас искомый фпс. Для следущего измерения нужно обнулить счётчик фпс предварительно сохранив старое значение last_fps=fps, fps=0, и снова запомнить текущее время: fps_time=Millisecs(). Ну а выводить на экран конешно последнее значение фпс из переменной last_fps. Без понимания логики работы алгоритмов, делать в программировании нечего. |
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
1. Все переменные твоей функции должны быть глобальными
2. deltatime должна быть типа float (#) 3. На deltatime нужно умножать любое действие которое в игре должно быть стабилизировано по фпс, т.е. вместо MoveEntity ent, 10,0,0 пишем MoveEntity ent, 10*deltatime,0,0 и т.д. Смысл умножения на делтатайм это "двигать вещи во столько раз быстрее во сколько раз наш фпс меньше проектного" З.Ы. а FPSCount должна быть глобальной! А если она глобальная то можно невозвращать её значение из функции. |
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
Код:
ЧТо делаю не так? |
Ответ: Дельта тайминг
Ндэ...
Давай вместе разберм твой код и посмеёмся. Код:
Global FPSTime,FPSCount,FPSCountTemp Код:
Global FPSTime%,FPSCount%,FPSCountTemp% Код:
delta# = 60.0 / FPSCount Что будет если разделить любое число на ноль? Правильно, получится бесконечность... т.к. в любом числе бесконечное число такого мелкого числа как ноль. Вопрос знатакам: зачем мы в главном цикле каждый раз вызываем функцию Init_Count_FPS()? Правильно: чтобы узнать текущий фпс, ведь условия меняются и фпс надо считать постоянно. Так какого %$#@! мы дельтатайм то считаем в самом начале, а не сразу после вызова функции Init_Count_FPS()? Теперь инструкция: строку delta# = 60.0 / FPSCount перенести в новое место сразу после строки Init_Count_FPS() и перед Flip Серьёзно, нужно как то уметь "читать" свой код. |
Ответ: Дельта тайминг
Unodeya
deltatime должна высчитыватся каждый кадр |
Ответ: Дельта тайминг
Ты главное не переживай, все когда-то начинали, не у всех гладко было с перенаправлением мозга на программирование с обычного мышления. Давай разбираться вместе... Сейчас я пошагово разберу твой код и покажу, где ошибки, и как с ними справиться. Поехали:
Код:
Global FPSTime,FPSCount,FPSCountTemp Код:
delta# = 60.0 / FPSCount Но ты поставил дельту до главного цикла. Окей, если еще не понятно, о чем я, давай пройдемся по значениям переменных: Первая строчка кода - объявлены FPSTime,FPSCount,FPSCountTemp, все они равны 0 Вторая строчка кода - ты заводишь дельту, и даешь ей значение 60/0 Поехали дальше Код:
Graphics3D 1024,768,32,2 А дальше идет твой главный цикл: Код:
Repeat Код:
Init_Count_FPS() Давай немножко отойдем в сторону от темы и подумаем, как в общих чертах должна работать программа: <инициализация> <вход в цикл> <тело главного цикла> <выход из цикла> <функции> Вот в общих чертах и все. Инициализация - это создание условий для запуска главного цикла, т.е. создание глобальных переменных, присвоение им _начальных_ (обрати на это, пожалуйста, внимание) значений, создание объектов, которые нужны будут на протяжение всей игры (например, камера, свет), вызова функций, которые должны быть вызваны до запуска главного цикла (например, у меня такая есть - запускает создание игровых объектов) В теле главного цикла происходит основная жизнь программы, то, что ты видишь на экране (или не видишь, если твоя программа не должна ничего выводить). Естественно, конструкция цикла применяется не всегда, а только в тех случаях, когда необходимо многочисленное или постоянное до соблюдения каких-либо условий выполнение какого-либо блока программы. В твоем случае таким блоком является сочетание логика + отрисовка. Важно понять одну вещь: компьютер делает не то, что ты хочешь, чтобы он сделал, а то, что ты ему скажешь сделать. Если ты хочешь, чтобы изменилось значение переменной - напиши правило, по которому оно должно измениться, и напиши его там, где она должна измениться... Еще важно тут то, что главный цикл выполняется как и любая программа, строчка за строчкой, и пока очередь выполнения не дойдет до какого-либо строки, код этой строки НЕ ВЫПОЛНИТСЯ. Ну, что такое функция ты похоже в общих чертах понимаешь. Ну и напоследок, какую же ошибку ты допустил? Ошибка заключается в том, что ты нигде в главном цикле не изменил свою дельту П.С. Постарался без рыбы, только удочками.. П.П.С. А, черт, опоздал... |
Ответ: Дельта тайминг
Ize'g0re +1 за розжовку материала новичку.
(судя по количеству сообщений,последние самое адское за всю истороию) |
Ответ: Дельта тайминг
Всем большое спасибо! В особенности: SBJoker,Ize'g0re,Jimon!
|
Ответ: Дельта тайминг
Цитата:
Код:
Global FPSTime%,FPSCount%,FPSCountTemp% |
Ответ: Дельта тайминг
фантастика !
интересно почему так Код:
Global FPSTime%=MilliSecs(),FPSCount%=60,FPSCountTemp% |
Ответ: Дельта тайминг
Спасибо.. Почему тогда когда я ставилю Flip 0 всё равно всё двигается быстро....
|
Ответ: Дельта тайминг
Цитата:
Форум это место где на добровольных началах люди помогают друг другу. Количество и качество помощи обычно зависит от правильно поставленого вопроса автором (конкретность, ясность), от уровня его притязаний на помощь форумчан (от простого вопроса до "напишите за меня программу".) ну и от уже заработаного авторитета на форуме. Несекрет что особенно наглых запоминают и игнорируют темы с их авторством. Поэтому если хотите получить конкретный ответ на свой вопрос в этом столетии, задавайте его в правильной ветке форума, с подробным описанием проблемы и приведением проблемного куска кода объёмом не более 10-20 строк(это условно, но "много букаф" отпугивают). Готовые решения алгоритмов ищите сами в соотв. ветках форума. Или на специализированых сайтах где вам за адекватное вознаграждение напишут что угодно. |
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
почему почти все темы с вопросом по программированию заканчиваются именно так ?
|
Ответ: Дельта тайминг
Помогите пожалуйста, если убераю VSync(Flip 0) что = Увелечение FPS, то дельта не работает.. В чём проблема?Заранее спасибо.
|
Ответ: Дельта тайминг
почитай, всё что есть в посте #2 этой темы - многое должно прояснится
|
Ответ: Дельта тайминг
Цитата:
Цитата:
И тут не детский сад что бы с вами носится. |
Ответ: Дельта тайминг
Цитата:
Неприходила мысть просто подумать логически? Ну, вам по-видимому ещё столько всего чудесного узнать предстоит о программировании. Без понимания логики работы алгоритмов, делать в программировании нечего. Пост #18 Так какого %$#@! мы дельтатайм то считаем в самом начале, а не сразу после вызова функции Init_Count_FPS()? Серьёзно, нужно как то уметь "читать" свой код. Всё это Ваши слова |
Ответ: Дельта тайминг
>> Без понимания логики работы алгоритмов, делать в программировании нечего.
А вы разве несогласны с этим тезисом??? |
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
Цитата:
ЗЫ: я лично врубился в логику ещё когда в своё "тяжелое"(для понимания) детство занимался практической электротехникоЮ =) Цитата:
Смотря на все темы которые ты создал тебя явно мучает боязнь поиска. Не (зло)слово-употребляй уважением форумчан) |
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
Цитата:
|
Ответ: Дельта тайминг
Цитата:
2, 4, 6, 13, 18, 19, 20. Цитата:
Цитата:
Цитата:
Время изучения ничего не значит. Кто-то и за год ничему не научится, кто-то за месяц научится основам. Цитата:
Твоя ошибка в данном случае в том, что ты откровенно пропускал объяснение алгоритма и настойчиво выпрашивал решения задачи вместо тебя. Сколько пройдет времени прежде чем ты попросишь "напишите мне игру"? Я объясню почему к тебе такое отношение. Видишь ли, в последнее время (около года) на форуме появилось достаточно заметная масса новичков, скажем так, разбалованных. У них в силу различных причин не было культуры постижения программирования как какой-либо прочей науки, будь то математика или биология. Каким-то непостижимым образом они начинают считать, что раз существует коммьюнити - то оно уже им должно, и что они будут неоценимо большим вкладом в его мозговые ресурсы. Такие люди не утруждают себя изучением работы программ, они стараются сразу же влезть в как можно более сложные вещи, написать игру века и так далее. Из-за неутруждения себя познанием основ они не понимают многих элементарных вещей, однако задают вопросы из области достаточно глубоких познаний в программировании... Однако понять, как реализовать алгоритм, зачастую им не суждено, поэтому они начинают настойчиво и уперто выпрашивать код (рыбу), не удовлетворяясь алгоритмом (удочкой). Такое поведение приводит к оценке новичка как "копипастера". Так вот. Твое поведение, твои попытки "качать права" (условно.... Выражавшиеся в твоих ответах в духе "Ты никто и не смеешь так мне отвечать") и настойчивая просьба дать код (причем даже после того как тебе код дали тебе этого не хватило, и ты попросил исправить твой пример) подводят твой портрет под рамочку "копипастер". Отсюда и такое отношение. Я не прошу, тем более не требую чтобы ты вел себя иначе. Как говорится, "МинЗдрав рекомендует". Я могу лишь посоветовать - попробуй поменять стиль своего обучения, с выпрашивания кода на понятие алгоритмов. Если тебе это интересно, можешь написать в ЛС, я сочиню с десяток алгоритмических задачек, которые могут помочь научиться пониманию работы программы, принципов реализации алгоритмов и т.п. П.С. ой многабукав получилось.... |
Ответ: Дельта тайминг
Ize'g0reНаписать за меня игру это ты сильно сказал..... SBJoker открыто смеялся надо мной. Я не терплю таких людей. Чисто из уважения я держался сколько мог... Я не теоретик я практик.. Люблю изучать теорию+ практику.. Я не понимаю на счёт копи пастеров, незнаю как для вас, но а почему бы и нет?? Рано или поздно копипастеры перестанут заниматься програмированием, либо они могут вникать в то что они копипастят, вдумыватся и уже вдальнейшем придумывать что то своё.. Я лично-не против таких людей...Лично я к тами не отношусь просто мне реально легче понять когда я вижу и вдумываюсь.. P.S Извеняюсь перед SBJokerom, но и прошу от него того же, если конечно он посчитает нужным.
|
Ответ: Дельта тайминг
никто не против копипастеров... все против того чтобы они лезли на форум и страдали фигней...
если тебе нравится вчитыватся и вдумыватся то мог-бы и сам что-то придумать уже - потомучто как видно, ты просишь код - тебе дают код... но как только в нём ошибка ты сразу просишь ещё один код, чтоб был уже исправленный... ну и на 5 это начинает конкретно бесить тех кто этот код собственно пишут |
Ответ: Дельта тайминг
2Unodeya:
Цитата:
Ну в конце дня и ты меня извини если я что то перегнул, ибо мы люди,и железки не стоят наших нервов... а вот полимеры...=) |
Часовой пояс GMT +4, время: 06:02. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot