|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.04.2010, 13:44 | #1 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Игр бессмысленней этой не бывает!
Эм... так! В общем две стороны, одна воюет против другой. Челбики тупо бегут друг на друга с воплями(которых не слышно, потому что я их не сделал) и палят друг в друга из калашей.
Там ещё где-то пробегал чувак которым можно управлять, у него жизни над его бошкой белым цветом выводятся, у него еще есть опыт, который начисляется за нанесенный им урон по врагу, эээ... он увеличивает характеристики персонажа, дааа...ээээ... ВСЁ; Системные требования очень высокие т.к. я быдло кодер и мне лень делать оптимизирование, вот. Кому интересно можете покопаться в "быдло коде". Писал в VC++ 2008 express edition. Юзал FreeImage и glew |
01.04.2010, 14:27 | #2 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Все же оптимизировать надо .
На моем самолете идет рывками. Все втреляют в одно время, и скорость падает, а потом снова возрастает. Больше идет не как игра а как демка. |
01.04.2010, 17:01 | #3 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Знаешь, вот что самое интересное, то что я этот проет создавал именно из-за того чтобы потренироваться в оптимизации.
Все поле разбиваю на квадраты, каждый квадрат хранит в себе индексы игроков(или указатели на структуры), которые находятся в этом квадрате. И AI начинает проверку квадратов с того где находится сам, а потом квадраты рядом и т.д. пока не найдет тот в котором есть враги, потом проверит какой из них ближе всего и тогда он будет полить именно по этому врагу. А сейчас, каждый раз, когда итый враг стреляет он проверяет расстояние до всех остальных врагов и выбирает ближайшего. враги*свои*2 проверок если кол-во врагов со всех сторон одинаково и нет управляемого юнита. Для 10х10 это 200 проверок. По поводу проверки на попадание снаряда. Тут я долго думал и решил использовать проверку пересечения отрезков. Каждый игрок вдоль и поперек пересечен невидимыми отрезками которые проверяются на пересечение с отрезком полета пули и выбирается самое близкое пересечение это еще +200 проверок на расстояние между точками и 400 проверок пересечения отрезков. Опять же если ввиду разделение всей игровой зоны на подзоны, то этот процесс можно оптимизировать. Там еще можно от корня квадратного в проверки расстояний можно избавиться. И еще много чего... |
01.04.2010, 17:11 | #4 | |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
|
01.04.2010, 20:15 | #5 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
все они стреляют одновременно только потому, что все появляются одновременно. У каждого есть параметр который играет роль таймера для перезарядки оружия. И время появления новых юнитов тоже регулируется в данном примере оно почти мгновенное. И все это корректируется в пару нажатий клавиш. Другое дело это вообще избежать этой нагрузки включая тот момент когда они стреляют одновременно.
Дельту времени я считаю просто (кол-во прошедших тактов)/(частоту) и разницу этих замеров. Результат запихиваю в double и он выражается в секундах, умножаем на 1000 получаем миллисекунды, 1/dt = FPS. + это dt используется везде где есть расчеты передвижения чего либо, поэтому мы и получаем тормоза, но объект всегда находится в нужном месте и делает свои дела вовремя=) |
01.04.2010, 20:35 | #6 | |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Думаю очевидно, что это генерировать надо до начала сцены.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
|
01.04.2010, 21:17 | #7 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
В любом случае на компьютере который крайзис тянет лагать не должно .
|
01.04.2010, 21:17 | #8 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
А я в последнее время стараюсь отойти от рисовальщика по Idle.
Т.е. всё рисование происходит по требованию (либо InvalidateRect на GDI, либо какое нибудь своё сообщение, посылаемое по таймеру). Пока что себя неплохо зарекомендовал мультимедийный таймер timeSetEvent, timeKillEvent. Логика работает по этому таймеру и когда считает, что ей надо что то новое нарисовать, тогда рисует. P.S. При включенной Vsync никаких тормозов не заметил. Загрузка процессора 4-6 %
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru Последний раз редактировалось Ulex; 01.04.2010 в 22:21. |
09.04.2010, 11:13 | #9 | ||
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
Цитата:
Цитата:
подпись
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
И такое бывает с программерскими проектами | Alar | Свободное общение | 18 | 20.10.2009 15:54 |
XMLTreeView - бывает такой? | mutabor | Компоненты Delphi | 2 | 31.08.2009 13:59 |
Почему бывает противно помогать | mihali4 | Свободное общение | 151 | 12.02.2009 10:12 |
Пиво бывает разное | Fainder | Свободное общение | 15 | 09.06.2007 22:23 |