Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2010, 13:44   #1
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию Игр бессмысленней этой не бывает!

Эм... так! В общем две стороны, одна воюет против другой. Челбики тупо бегут друг на друга с воплями(которых не слышно, потому что я их не сделал) и палят друг в друга из калашей.
Там ещё где-то пробегал чувак которым можно управлять, у него жизни над его бошкой белым цветом выводятся, у него еще есть опыт, который начисляется за нанесенный им урон по врагу, эээ... он увеличивает характеристики персонажа, дааа...ээээ... ВСЁ;
Системные требования очень высокие т.к. я быдло кодер и мне лень делать оптимизирование, вот.

Кому интересно можете покопаться в "быдло коде".
Писал в VC++ 2008 express edition. Юзал FreeImage и glew
Изображения
Тип файла: jpg 123.jpg (162.7 Кб, 217 просмотров)
Вложения
Тип файла: rar game.rar (1.60 Мб, 66 просмотров)
Kostia вне форума Ответить с цитированием
Старый 01.04.2010, 14:27   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Все же оптимизировать надо .
На моем самолете идет рывками. Все втреляют в одно время, и скорость падает, а потом снова возрастает. Больше идет не как игра а как демка.
Вадим Буренков вне форума Ответить с цитированием
Старый 01.04.2010, 17:01   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Знаешь, вот что самое интересное, то что я этот проет создавал именно из-за того чтобы потренироваться в оптимизации.
Все поле разбиваю на квадраты, каждый квадрат хранит в себе индексы игроков(или указатели на структуры), которые находятся в этом квадрате. И AI начинает проверку квадратов с того где находится сам, а потом квадраты рядом и т.д. пока не найдет тот в котором есть враги, потом проверит какой из них ближе всего и тогда он будет полить именно по этому врагу.
А сейчас, каждый раз, когда итый враг стреляет он проверяет расстояние до всех остальных врагов и выбирает ближайшего. враги*свои*2 проверок если кол-во врагов со всех сторон одинаково и нет управляемого юнита. Для 10х10 это 200 проверок.
По поводу проверки на попадание снаряда. Тут я долго думал и решил использовать проверку пересечения отрезков. Каждый игрок вдоль и поперек пересечен невидимыми отрезками которые проверяются на пересечение с отрезком полета пули и выбирается самое близкое пересечение это еще +200 проверок на расстояние между точками и 400 проверок пересечения отрезков. Опять же если ввиду разделение всей игровой зоны на подзоны, то этот процесс можно оптимизировать.
Там еще можно от корня квадратного в проверки расстояний можно избавиться.
И еще много чего...
Kostia вне форума Ответить с цитированием
Старый 01.04.2010, 17:11   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Все втреляют в одно время, и скорость падает, а потом снова возрастает.
К стати, это не хорошо, было бы оптимальнее, что бы они стреляли по очереди (нагрузка была бы размазана во времени)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 01.04.2010, 20:15   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

все они стреляют одновременно только потому, что все появляются одновременно. У каждого есть параметр который играет роль таймера для перезарядки оружия. И время появления новых юнитов тоже регулируется в данном примере оно почти мгновенное. И все это корректируется в пару нажатий клавиш. Другое дело это вообще избежать этой нагрузки включая тот момент когда они стреляют одновременно.
Дельту времени я считаю просто (кол-во прошедших тактов)/(частоту) и разницу этих замеров. Результат запихиваю в double и он выражается в секундах, умножаем на 1000 получаем миллисекунды, 1/dt = FPS. + это dt используется везде где есть расчеты передвижения чего либо, поэтому мы и получаем тормоза, но объект всегда находится в нужном месте и делает свои дела вовремя=)
Kostia вне форума Ответить с цитированием
Старый 01.04.2010, 20:35   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
У каждого есть параметр который играет роль таймера для перезарядки оружия.
А если его рандомно генерировать ? (т.е. что бы они появлялись не с перезаряженным оружием, а на разных этапах перезарядки)
Думаю очевидно, что это генерировать надо до начала сцены.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 01.04.2010, 21:17   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

В любом случае на компьютере который крайзис тянет лагать не должно .
Вадим Буренков вне форума Ответить с цитированием
Старый 01.04.2010, 21:17   #8
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

А я в последнее время стараюсь отойти от рисовальщика по Idle.
Т.е. всё рисование происходит по требованию (либо InvalidateRect на GDI, либо какое нибудь своё сообщение, посылаемое по таймеру).
Пока что себя неплохо зарекомендовал мультимедийный таймер timeSetEvent, timeKillEvent. Логика работает по этому таймеру и когда считает, что ей надо что то новое нарисовать, тогда рисует.

P.S.
При включенной Vsync никаких тормозов не заметил. Загрузка процессора 4-6 %
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 01.04.2010 в 22:21.
Ulex вне форума Ответить с цитированием
Старый 09.04.2010, 11:13   #9
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Знаешь, вот что самое интересное, то что я этот проет создавал именно из-за того чтобы потренироваться в оптимизации.
Все поле разбиваю на квадраты, каждый квадрат хранит в себе индексы игроков(или указатели на структуры), которые находятся в этом квадрате. И AI начинает проверку квадратов с того где находится сам, а потом квадраты рядом и т.д. пока не найдет тот в котором есть враги, потом проверит какой из них ближе всего и тогда он будет полить именно по этому врагу.
А сейчас, каждый раз, когда итый враг стреляет он проверяет расстояние до всех остальных врагов и выбирает ближайшего. враги*свои*2 проверок если кол-во врагов со всех сторон одинаково и нет управляемого юнита. Для 10х10 это 200 проверок.
Можно было бы для каждого юнита хранить позицию на игровом поле, а потом
Цитата:
потом проверит какой из них ближе всего и тогда он будет полить именно по этому врагу.
10 юнитов = 10 проверок
подпись
liljon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И такое бывает с программерскими проектами 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