Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
var
OGTC: cardinal; // для сверки с таймером
procedure CheckPhys;
begin
if OGTC < GetTickCount then begin
Phys; // тут считается вся игровая физика и все изменения состояний. Звуки тоже здесь.
Inc(OGTC, dT);
end;
end;
procedure Graph; // процедура отрисовки графики
var
i: integer;
begin
CheckPhys;
for i := 0 to ItemCount - 1 do with Items[i]^ do CopyPosition := Position; // делаем копию состояния перед отрисовкой мира!
for i := 0 to ItemCount - 1 do begin
ShowItem(Items[i]^); // рисуем элемент мира
CheckPhys; // проверяем, не пора ли снова считать физику
end;
end;
procedure OnIdle;
begin
if PlayingGame then Graph;
end;
Надо, чтобы в игре скорость игрового процесса не зависела от тормозов графики. Даже когда кадр долго рисуется, звуки и движения делаются строго по таймеру. Создавать лишний поток мне в лом, и вообще я дико боюсь приколов с синхронизациями и так далее. Поэтому сделал такую хрень. Сэмулировал многопоточность банальным однопоточным кодом.
Кстати, о тормозах. Игра отлаживалась под комп с 600м селероном и 8 метрами видео.
Но с точки зрения современной моды на многоядерность это действительно не лучшее решение, за что и попало сюда.
На самом деле это не стрелялка, а трамвайный симулятор, поэтому никто не дохнет и так важно воспроизведение звука (перестука колёс) по таймеру. Смысл в том, чтобы предварительно копировать всё, что необходимо для отрисовки. В данном случает это только положения, всё остальное тут не меняется.
А какая разница, на самом деле? Ну компилятор дубовый, да и то это больше на вещественных числах сказывается, где надо, можно на фиксированную точку перейти.
Ну было дело, увлекался геймдев-ом, на с++ с директикс-ом, все вроди логично, правильно и адекватно, но в дельфи (который ради интереса тоже выучил когда-то) это все представить как-то не могу:) Слишком уж дельфи "слабенький".
Используется в большинстве случаев как процедурный. В частности для обучения программированию студентов.
Честно говоря за дельфи следить я практически перестал после 7й версии, сейчас там с дотнетом вроди как связались так что всё возможно. И давайте прекратим спор:)
> Используется в большинстве случаев как процедурный. В частности для обучения программированию студентов.
и чо? а отдельнгые индусы не знают о циклах и копипастят код n раз. сделаем вывод, что в с++ нет цикла for?
дельфи - добротный ООП-язык, иерархия ООП в .net частично взята из дельфовского VCL (помимо java).
процедурно учат потому что это даёт понять основы построения алгоритмов. то что в совковых вузах не дают основы построения объектных интерфейсов - вина некомпетентных, нежелающих учиться учителей, а не дельфи.
я не защищаю дельфи, потому что она полное говно, просто какбэ не люблю когда клевещут 🙂
>дельфи - добротный ООП-язык
Ты долбоёб. Дельфи - аспектно-ориентированный язык. Настоящий ООП - это SmallTalk.
Когда, вас, макак начнут отстреливать и изолировать в зоопарке от общества?
> Ты долбоёб. Дельфи - аспектно-ориентированный язык
ну ты и мудак, дельфи это компонентно-ориентированный скорее. но компониетно-ориентированность я бы сказал это разновидность ООПа, ибо включает в себя его.
тебе автор говорит одно, "дельфи морально устарел", а ты гнёшь другое "на дельфи можно написать что угодно", лол. на ассемблере тоже можно написать что угодно =\\
хотя цпп тоже отстал от 2010 года, но засчёт огромнейшего коммьюнити живёт и здравствует, а дельфин труп перепродают из компании в компанию тем временем. и вообще ждельфи популярна только в странах разваливающегося снг, что символизируте.
многие игры именно так и работают. рил-тайм на виндах делать (да и под любой другой ОСью) это настоящий гемор.
я как-то тетрис написал. как только пытаешься выше 30 отрисовок в секунду делать (ака 30фпс), у всех типов таймеров (включая мультимедиа таймеры) начинает крыша ехать и из-за задержек игра становится слишком не равномерной. про потоки даже не упоминайте - там все еще хуже.
ну оно как бы и логично: все смотрят в играх на frames-per-second. больше - лучше. а если хочешь как можно более высокий фпс, то само собой разумеется что CPU на 100% всегда будет загружатся. а если ЦПУ на 100% по определению может загружатся, то на кой хер с таймерами возится - простой tight loop намного более прост и эффективен.
млять в ебаном дельфи хуй разберёшь где вызов функции а где считка с переменной, короче код не понял, но ты автор чото мудень, "Даже когда кадр долго рисуется, звуки и движения делаются строго по таймеру. " эот просто пиздец, во-первых, если я правильно понял чо ты творишь, то тебе тут тоже требуется синхронизация так-то, пусть и один поток, ибо во время отрисовки если меняется состояние, без разницы в другом потоке или в этом же, будет енправильная отрисовка (начали рисовать одно, а закончили - другое), во=вторых ты не слышал об отрисовке по дельте времени? высчитается время, которое прошло на отрисовку кадра, и изменение состояния высчитывается по линейной формуле типа f(x) = x + timeDelta * speed; в-третьих синхронизировать аудиопоток стука колёс со скоростью трамвая это пиздец нулевой оверхед, в-четвёртых вряд ли ты пишешь фаркрай, каким образом кадр должен отрисовываться так долго (больше 16 мс), чтобы были заметны задержки, ты наверное в лоб рисуешь, без каких-либо приличных алгоритмов?
А... Ну так Луговский имел в виду чтобы человек знал функциональщину ещё какую-нибудь или декларативщину, а ТарасБ имел виду - хаха - Дельфи, который те же яйца, что и C/C++, только в профиль. Т.е. употребление цитаты невпопад.
> в-третьих синхронизировать аудиопоток стука колёс со скоростью трамвая
Нету аудиопотока колёс, понимаешь? Каждое пересечение колеса с каждым стыком честно считается, при этом издаётся стук. Дельты не катят, ритм стука сразу нарушается, я проверял. И кстати, как с дельтами сделать ускорение и гармонические колебания вагона после прохождения стыка?
> каким образом кадр должен отрисовываться так долго
Ты вообще обсуждение читал? Про 600 МГц селерон и 8 МБ видео, например?
Кстати, на современных компах игра успешно обрабатывает в реальном времени всю трамвайную сеть Петербурга. Рисует, правда, только 2-км окрестность. По ночам можно увидеть линии фонарей дальнего квартала.
> ты наверное в лоб рисуешь, без каких-либо приличных алгоритмов
Да, я не делаю БСП, если ты об этом. Там не в нём дело.
>Кстати, на современных компах игра успешно обрабатывает в реальном времени всю трамвайную сеть Петербурга.
Кстати, программа коммерческая? Для чего используется и используется ли? Может есть предложения, для чего она будет использоваться?
Нет, халявная. Используется, чтобы вспомнить те времена, когда ещё не поснимали половину рельсов. Есть те, кому это интересно: http://lurkmore.ru/Трамвайщики
Были идеи использовать для обучения. Или для расчёта расписания.
А чё... Прикольная игруха у TarasB. Я так понимаю продовать ты её не собираешься пока? Когда можно будет поиграть?
Вспоминается старый добрый ДОС. Про что игрушка хоть? Поподробней плиз. 🙂
Ну продавать вряд ли, школота графу не оценит. Тут фишка в физике и ИИ.
> Про что игрушка хоть?
Гугль первой ссылкой выдаёт на запрос "трамвайный симулятор".
Удваиваю, с байтораздирающим versioning`ом можно было бы даже на статическом хостинге narod.ru оформить так, чтобы действие "получить свежую версию" не требовало антикиферской машины и календарей или логических заключений типа "ага, для истории он выложил первой сверху, значит свежую следует искать внизу"
Кто-бы что не говорил, а прикольно. Похоже на поезд. Рельсы. Стук колёс. Полная луна. Сверкающие огни города и Бетмен перелетает с крыши на крышу. Романтика... 🙂
зы: Трамваи действительно разгоняются на 90 км(или миль)? А они могут больше?
В реале? Могут. Даже те, которые мы каждый день видим. Но только, если гайки подкрутить и нормальные рельсы сделать. А этого в этой стране долго не будет. Но вот в Европе так и есть.
>Не понял насчёт бетмена.
Ой. Ну не пребедняйтесь. Был там такой с треугольными ушами. 🙂 Он меня ещё спасал, когда два трамвая столкнулись, после выключения автопилота. 🙂
Сделайте графический back-end для незадрыпанных машин. В чём сложность? Т.е. если машина старая - используется то, что есть. Если новая - загружается либа с крутой графикой. Определить не так сложно, можно даже дать пользователю самому выбрать, если лень определять.
Ну может не хочет человек заниматься 3D-моделированием (в 3D редакторах). Хочет реалистично смоделировать поведение трамваев. Не ставит пока себе других задач.
Подозреваю что так и есть.
На днях выкачал симулятор для космофагов (кроме субъекта idee fixe, существенных отличий от железнодорожных фетишистов нет) и наблюдал совершенно сказочные тормоза, причем в таких местах, где работы шейдера в общем-то и не видно. (ЧСХ, имя файла оказалось 'orbiter100606.zip')
> Делать две модели - детальную и простую? Сложность много где.
В 3d-редакторах вроде есть функция уменьшения числа полигонов в получившейся модели. Вообще в любых совр. играх делают сразу где-то по три версии модели (на каждый LOD).
И как я сделаю 3 версии модели? Про известные 3Д-редакторы не надо - так народ даже с фарами геморроится по страшному. А случайный цвет вагона? А лампочки, меняющие цвет в зависимости от номера маршрута (есть такие на вагонах сверху)?
Ты эти вопросы задаёшь, как будто никогда не программировал.
> Про известные 3Д-редакторы не надо - так народ даже с фарами геморроится по страшному.
Чё не надо? Посмотри любую игру -- на рразные LOD'ы разная детализация модельки. Какой геморой? Я точной комманды не скажу, но в тридэсмаксе уменьшать полигоны можно буквально двумя щелками
> А случайный цвет вагона?
А это как-то зависит от сложности модельки? Так же перекрашивай, как и перекрашивал. Вообще вагоны не самое главное, их можно делать "квадратными", особо никто разниц не заметит (ибо в рашке транспорт таковым и является - квадратным). Я больше говорил про окружение: дома, природа, деревца там. Чтоб было на что смотреть.
> А лампочки, меняющие цвет в зависимости от номера маршрута (есть такие на вагонах сверху)?
Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол
Только опять же, я не понял каким боком здесь сложность моделек вообще
У меня свой формат. Что я буду делать с форматом Макса? Только модель фиксированного цвета, и всё. У меня модель - это одновременно модель и простой скрипт.
> Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол
Тогда почему в Trains и MSTS так делать не выходит? И ещё много чего.
> У меня свой формат. Что я буду делать с форматом Макса? Только модель фиксированного цвета, и всё. У меня модель - это одновременно модель и простой скрипт.
А ты в чём их делаешь? Вручную, что ли, как в детстве в бейсике: DrawLine(..) -- с постоянной проверкой Run на каждом шагу, что вышло?
В 3dsmax и подобных ему пакетах всегда есть система плагинов (в 3dsmax это MAXScript, в Blender -- Python) -- можно написать самому простенький экспортер в свой формат (перебором полигонов в сцене). Так геймдев-компании и делают обычно.
> Только модель фиксированного цвета, и всё
Хм....
> Тогда почему в Trains и MSTS так делать не выходит?
Переписать эту лапшу нахрен, до сих пор код толком не переписывался (исходники первой версии 2007 года в открытом доступе на сайте, можешь поржать, если найдёшь чего такого в них).
Я начинал это три года назад, мне было 19, я был бородат, писал, лишь бы работало.
ну школота, что поделаешь.
Из за таких как ты сейчас программы и тормозят на четырехядерных процах.
Ох, дэльфи, дэльфи...
мне понравилось кстати, теперь я пишу на дельфи, ебусь в жопу и сру на говнокоде)
Но с точки зрения современной моды на многоядерность это действительно не лучшее решение, за что и попало сюда.
дельфи, морально устарел, и на практике является не более чем языком для обучения или написания мелких программ.
с чего ты взял?
Честно говоря за дельфи следить я практически перестал после 7й версии, сейчас там с дотнетом вроди как связались так что всё возможно. И давайте прекратим спор:)
и чо? а отдельнгые индусы не знают о циклах и копипастят код n раз. сделаем вывод, что в с++ нет цикла for?
дельфи - добротный ООП-язык, иерархия ООП в .net частично взята из дельфовского VCL (помимо java).
процедурно учат потому что это даёт понять основы построения алгоритмов. то что в совковых вузах не дают основы построения объектных интерфейсов - вина некомпетентных, нежелающих учиться учителей, а не дельфи.
я не защищаю дельфи, потому что она полное говно, просто какбэ не люблю когда клевещут 🙂
Ты долбоёб. Дельфи - аспектно-ориентированный язык. Настоящий ООП - это SmallTalk.
Когда, вас, макак начнут отстреливать и изолировать в зоопарке от общества?
ну ты и мудак, дельфи это компонентно-ориентированный скорее. но компониетно-ориентированность я бы сказал это разновидность ООПа, ибо включает в себя его.
нефига. медленее
>я бы сказал это разновидность ООПа
меньше болтай лось если не знаешь
хотя цпп тоже отстал от 2010 года, но засчёт огромнейшего коммьюнити живёт и здравствует, а дельфин труп перепродают из компании в компанию тем временем. и вообще ждельфи популярна только в странах разваливающегося снг, что символизируте.
платиновые вбросы /gk/
как там поддержка Дельфей 64-бит?
я как-то тетрис написал. как только пытаешься выше 30 отрисовок в секунду делать (ака 30фпс), у всех типов таймеров (включая мультимедиа таймеры) начинает крыша ехать и из-за задержек игра становится слишком не равномерной. про потоки даже не упоминайте - там все еще хуже.
ну оно как бы и логично: все смотрят в играх на frames-per-second. больше - лучше. а если хочешь как можно более высокий фпс, то само собой разумеется что CPU на 100% всегда будет загружатся. а если ЦПУ на 100% по определению может загружатся, то на кой хер с таймерами возится - простой tight loop намного более прост и эффективен.
"Главное, чтоб C и C++ не были единственными доступными программисту инструментами — иначе это адски паршивый программист."
знаю бейсек, хаскель, лисп, окамл, сишарп, жабу, чуть=чуть с++, обж-с, брейнфак, пейтон, но паскаль не знаю и знать не хочу.
"Бейсек - 11%
Крэкинг - 34%
ICQ - 10%"
Вебкилл, залогинься.
слил, короче
бородат?
это чья цитата? какого-нибудь пришибленного вирта?
цитата луговского произнесенная в одном из эпичных тредов.
Строчка номер 17.
> в-третьих синхронизировать аудиопоток стука колёс со скоростью трамвая
Нету аудиопотока колёс, понимаешь? Каждое пересечение колеса с каждым стыком честно считается, при этом издаётся стук. Дельты не катят, ритм стука сразу нарушается, я проверял. И кстати, как с дельтами сделать ускорение и гармонические колебания вагона после прохождения стыка?
> каким образом кадр должен отрисовываться так долго
Ты вообще обсуждение читал? Про 600 МГц селерон и 8 МБ видео, например?
Кстати, на современных компах игра успешно обрабатывает в реальном времени всю трамвайную сеть Петербурга. Рисует, правда, только 2-км окрестность. По ночам можно увидеть линии фонарей дальнего квартала.
> ты наверное в лоб рисуешь, без каких-либо приличных алгоритмов
Да, я не делаю БСП, если ты об этом. Там не в нём дело.
я ебу, опенгл должен справиться
Кстати, программа коммерческая? Для чего используется и используется ли? Может есть предложения, для чего она будет использоваться?
Были идеи использовать для обучения. Или для расчёта расписания.
http://www.gamedev.ru/code/forum/?id=133916
Даже скриншёты есть.
Вспоминается старый добрый ДОС. Про что игрушка хоть? Поподробней плиз. 🙂
> Про что игрушка хоть?
Гугль первой ссылкой выдаёт на запрос "трамвайный симулятор".
Все вопросы RTFM.
http://papertram.ucoz.com/forum/10-47-1
И да. Я Pokimon. Неправильно пишешь.
зы: Трамваи действительно разгоняются на 90 км(или миль)? А они могут больше?
Не понял насчёт бетмена.
Ой. Ну не пребедняйтесь. Был там такой с треугольными ушами. 🙂 Он меня ещё спасал, когда два трамвая столкнулись, после выключения автопилота. 🙂
постарайтесь!
Потому что говнокод и логика макаронинами вшита в графический код?
Ты в фаркрае видел галочку, позволяющую играть на первом пне?
Ну вы меня поняли. Я как-бы о задачах говорю.
На днях выкачал симулятор для космофагов (кроме субъекта idee fixe, существенных отличий от железнодорожных фетишистов нет) и наблюдал совершенно сказочные тормоза, причем в таких местах, где работы шейдера в общем-то и не видно. (ЧСХ, имя файла оказалось 'orbiter100606.zip')
В 3d-редакторах вроде есть функция уменьшения числа полигонов в получившейся модели. Вообще в любых совр. играх делают сразу где-то по три версии модели (на каждый LOD).
Ты кого учишь? Гейммейкера учишь. Сколько ты игр сделал? TarasB как минимум сделал эту.
> Про известные 3Д-редакторы не надо - так народ даже с фарами геморроится по страшному.
Чё не надо? Посмотри любую игру -- на рразные LOD'ы разная детализация модельки. Какой геморой? Я точной комманды не скажу, но в тридэсмаксе уменьшать полигоны можно буквально двумя щелками
> А случайный цвет вагона?
А это как-то зависит от сложности модельки? Так же перекрашивай, как и перекрашивал. Вообще вагоны не самое главное, их можно делать "квадратными", особо никто разниц не заметит (ибо в рашке транспорт таковым и является - квадратным). Я больше говорил про окружение: дома, природа, деревца там. Чтоб было на что смотреть.
> А лампочки, меняющие цвет в зависимости от номера маршрута (есть такие на вагонах сверху)?
Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол
Только опять же, я не понял каким боком здесь сложность моделек вообще
Ты промахнулся на 180 градусов.
> Так же перекрашивай, как и перекрашивал.
У меня свой формат. Что я буду делать с форматом Макса? Только модель фиксированного цвета, и всё. У меня модель - это одновременно модель и простой скрипт.
> Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол
Тогда почему в Trains и MSTS так делать не выходит? И ещё много чего.
А ты в чём их делаешь? Вручную, что ли, как в детстве в бейсике: DrawLine(..) -- с постоянной проверкой Run на каждом шагу, что вышло?
В 3dsmax и подобных ему пакетах всегда есть система плагинов (в 3dsmax это MAXScript, в Blender -- Python) -- можно написать самому простенький экспортер в свой формат (перебором полигонов в сцене). Так геймдев-компании и делают обычно.
> Только модель фиксированного цвета, и всё
Хм....
> Тогда почему в Trains и MSTS так делать не выходит?
Думаю, потому что говно.
> А случайный цвет вагона?
Плохому танцору...
Тем не менее - то что есть - всё равно мне нравится.
А там только ночь? У нас по ночам трамваи не ездят. Да и ночь не всё время...
Я начинал это три года назад, мне было 19, я был бородат, писал, лишь бы работало.