 |
11.10.2014, 23:14
|
#511
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
Я всё таки еще раз предлагаю, если проект не коммерческий, разместить коды в каком-нибудь репозитории.
|
(Offline)
|
|
11.10.2014, 23:45
|
#512
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Пожалуйста: https://github.com/mrDIMAS/src
Там ничего особенного нет - только голые исходники.
Репозиторий будет обновляться раз в неделю или около того.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
|
|
11.10.2014, 23:59
|
#513
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
Буду время от времени изучать.
Ранее здесь шли разговоры о borderless window и 30fps в Ubisoft играх.
И вроде бы нашлось решение менять разрешение в borderless окне, а вот что насчёт fps?
Оконное приложение в d3d9 можно создавать с параметрами FullScreen_RefrashRateInHz = 0 и PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT | D3DPRESENT_INTERVAL_ONE | D3DPRESENT_INTERVAL_IMMEDIATE.
Во первых сделать 30 fps не получится, во вторых нет уверенности что у пользователя установлено 60.
Как вариант можно установить IMMEDIATE, а затем поставить ручной ограничитель.
Кто что думает?
|
(Offline)
|
|
12.10.2014, 15:35
|
#514
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
Попробуй в Renderer::RenderWorld вместо
float timeStep = 1.0f / 60.0f;
//if( g_fpsCounter.fps > 0 )
// timeStep = 1.0f / (float)g_fpsCounter.fps;
const int subSteps = 4;
g_dynamicsWorld->stepSimulation ( timeStep, subSteps );
написать
float timeStep = 1.0f / 60.0f;
//if( g_fpsCounter.fps > 0 )
// timeStep = 1.0f / (float)g_fpsCounter.fps;
const int subSteps = 4;
g_dynamicsWorld->stepSimulation ( timeStep, subSteps, 1.0f / 120.0f );
Если это не исправит проблему, значит она в другом.
|
(Offline)
|
|
12.10.2014, 16:18
|
#515
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Так только тормозит сильнее физика и не помогло.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.10.2014, 19:52
|
#516
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
Удобно что в оконном режиме (в том числе borderless), даже если открываешь стартовое меню, которое в Win8 полноэкранное, не происходит потеря устройства.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.10.2014, 16:05
|
#517
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
У тебя оказывается ещё OpenGL движок есть.
Кстати я тоже не сторонник выкладывать в репозиторий файлы проекта и прочие вещи относящиеся больше к IDE чем к коду, но всё-таки совсем без инструкции непонятно что с чем собирать.
Например у себя я по папкам разбросал исходники -- каждая папка это модуль сборки, ещё есть батник (или makefile) в котором так-же можно разобраться в структуре проекта, и выставив пути, собрать.
|
(Offline)
|
|
13.10.2014, 17:23
|
#518
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Таки движок на огле так себе поделка.
Чтобы собрать нужно иметь еще кучу всего.
DirectX SDK
Bullet 2.83
MagicInput ( h, lib ) - мышь\клава
ProjectF ( h, lib ) - звук
Еще есть конвертер, скрипт для макса, Visual Leak Detector.
Все кроме булета и vld и DirectX SDK могу скинуть отдельно. + файлы проекта( на VS 2012 )
Кароч проект большой и имеет кучу зависимостей, так что с системы на систему трудно переезжать.
Движок ( Ruthenium.dll ) - это все кроме того что лежит в Game
Игра - ( Mine.exe ) - это Game
__________________
|
(Offline)
|
|
13.10.2014, 19:56
|
#519
|
Мастер
Регистрация: 12.01.2009
Сообщений: 983
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: [TrueHorror] - разработка
Давай скинь, попробую собрать.
MagicInput и ProjectF если будут меняться, то их тоже имеет смысл зарепозиторить.
Кстати буллет не тот движок чтобы обновлять, обычно выбирают одну версию на весь цикл разработки проекта.
Обычно раз есть исходники, можно самому допиливать и добавлять нужные возможности.
|
(Offline)
|
|
14.10.2014, 01:55
|
#520
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Медия уже сильно поменялась, изменились многие конфиги... кароч чтоб тебе собрать и запустить нормально нужно тебе кидать всю рабочую папку - это почти 1,5 Гб.
Кароч, если у тебя есть скайп можешь мне написать, я скину свежую версию. мой скайп xcoolmrdimas
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.10.2014, 00:31
|
#521
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Че сделал:
1) Сохранение\загрузку уровня. Соответственно быстрое сохранение\загрузка тоже есть. Игра сохраняется при выходе. Чек поинты делать не буду - слишком казуально.
2) Всё
Сделать сохранение\загрузку оказалось не такой простой задачей. В общем потратил кучу времени, но все равно остались некоторые мелкие баги не влияющие на загрузку\сохранение.
Потестировать можно будет когда я сделаю еще один уровень и доделаю предыдущие уровни.
Впрочем кто шарит C++ может глянуть репозиторий на GitHub'e у меня в подписи.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
|
|
15.10.2014, 00:42
|
#522
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
по концепции расскажи вкратце как делал сейв/лоад?
в шарпе мне дико помог встроенный в язык Reflection, но я каждый раз содрогаюсь при мысли о том, как бы я это реализовывал на С++.
|
(Offline)
|
|
15.10.2014, 01:03
|
#523
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Делал "в лоб".
При сохранении:
1) Сохраняем данные чилдов корня уровня. Пишем имя чилда( у всех объектов в двиге всегда уникальные имена ), пишем позицию, поворот, виден\скрыт.
2) Сохраняем позицию игрока, и все его параметры - это около 50 переменных.
3) Сохраняем предметы. Пишем имя объекта к которому привязан предмет( нода предмета загружается вместе с уровнем ). Пишем параметры предмета.
Ну и в таком духе все остальное делаем.
При загрузке:
1) Читаем имя чилда. Находим его в сцене( глобально ). Читаем все его параметры.
2) Читаем позицию игрока, читаем его параметры.
3) Читаем имя предмета. Находим указатель на предмет по имени предмета( да, вот такой оверхед, но зато просто ). Читаем параметры предмета, и суем их по указателю в сам предмет.
Теперь объясню почему именно так. Если при загрузке сейва уровень_N не создан, то создается дефолтный уровень_N - при загрузке создаются все предметы, двери, и прочее прочее, затем уже происходит загрузка самого сейва и возвращение всех параметров объектов. То есть всегда гарантируется наличие всех объектов на дефолтном уровне_N.
Быстрое сохранение\загрузка работают очень быстро - 10 мс. Кароч моментально загружается\сохраняется.
Возможно для игры другого типа этот подход не прокатит. Особенно если объекты создаются динамически. У меня так просто получилось именно из-за наличия фиксированного числа объектов на каждом уровне.
Можно глянуть сурсы на гитхабе - сначала можно посмотреть SaveWriter\SaveLoader затем у каждого сохраняемого объекта есть метод Serialize\Deserialize
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.10.2014, 01:08
|
#524
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
я у себя в игре задолбался с динамически создаваемыми объектами, большинство глюков выходило именно из-за них. в результате по максимуму зарезервировал в сцене важные сложные объекты типа всех приезжающих копов, их машин, чтобы они всегда чётко были одни и те же.
у меня трабла значительная была ещё с тем, что переменных просто миллион, каждый нпс в себе содержит добрую сотню их, а завтра я могу добавить ещё какой-нибудь float timeToStopShoutingAtDogsWhoShitUnderTrees, и мне ещё это добавлять в сейв/лоад?! а у каждого нпс с уникальным поведением/диалогами - ещё свои переменные. так что необходимо было мутить универсальную систему, которой не нужно знать ничего более имени класса, руками перебирать я бы просто обосрался.
и вот в С++ думаю разве что кодогенератором сделал на основе существующих хидеров с переменными.
|
(Offline)
|
|
15.10.2014, 01:12
|
#525
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Можно сделать как в кваке сделано. Там есть тип cvar_t, им можно рулить из консоли( если играл, поймешь о чем я ). И есть общий список всех таких переменных
Пример его использования
cvar_t sv_gravity = {"sv_gravity","800",false,true};
Может я говорю очевидные вещи, но можно взять шарповский аналог сишного map. Возможно это будет слишком жирно, но удобство пользования подкупает.
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:23.
|