forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

Samodelkin 24.09.2014 19:56

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 287211)
У себя в движке использую свою корявую библу. Тащит мышь, клаву. Есть поддержка KeyUp, KeyDown, KeyHit, MouseDown, MouseUp, MouseHit, позиция мыши относительно начала клиентской области окна. Мне хватает с головой.

И ты это делал поверх DirectInput? А как дела обстоят с языками? Например если я русский текст ввожу мне самому нужно преобразовывать? Всё тоже самое есть в сообщениях Windows, в том числе и языковые локализации. Короче мне кажется это велосипед, DirectInput и XInput нужны для аналоговых устройств, типа джойстиков, рулей, педалей, возможно мыши.
Хотя я сам тоже через DirectInput всё сделал, но вот сейчас буду переделывать.

//================================================== ======

К тому же у тебя в MagicInput обращение к клавиатуре через GetDeviceState -- при низком FPS у тебя нажатия будут выпадать или будет неправильная очередность при быстром наборе текста. Через состояние устройства можно опрашивать только аналоговые устройства (мышь, рули, контроллеры и т.п.)

mr.DIMAS 30.09.2014 19:32

Ответ: [TrueHorror] - разработка
 
Долго отдыхал от игродела. Играл в дарксоулс 2. Но настало время вернуться.

Прошел свою игрушку с не затуманенными мозгами и понял, что очень мало интерактива в игре. Поэтому добавил разные интерактивные объекты:
1) Лестницы
2) Двери( есть и запертые двери, но ко всем есть ключи - ибо это не сайлент хилл :-D )
3) Вентиляционные ходы( общее название, на самом деле можно будет ползать и в узких проходах - например в трещине в скале )

По лестницами можно лазать вверх-вниз. По вентиляционным ходам можно ползать туда-сюда.

Вообще полезно отдыхать от геймдева - сразу свежие мысли в голову приходят.

mr.DIMAS 02.10.2014 16:13

Ответ: [TrueHorror] - разработка
 
Как на ваш взгляд: стоит ли делать видимым тело персонажа, и соответственно анимировать его для разных действий - типа того, как сделано в Outlast?

P.S. Переехал на C++11 и Bullet Physics 2.81. Сделал в движке строгую типизацию - до этого все хендлы объектов из движка передавались в виде указателя на объект reinterpret_cast к int. В итоге появлялись трудно уловимые баги.

Samodelkin 02.10.2014 21:05

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 287580)
Как на ваш взгляд: стоит ли делать видимым тело персонажа, и соответственно анимировать его для разных действий - типа того, как сделано в Outlast?

Достаточно анимировать руки и движения камеры для разных действий.
Я думаю пока лучше экономить.

Цитата:

P.S. Переехал на C++11 и Bullet Physics 2.81. Сделал в движке строгую типизацию - до этого все хендлы объектов из движка передавались в виде указателя на объект reinterpret_cast к int. В итоге появлялись трудно уловимые баги.
MSVS 2013 не до конца совместим, но кодить на С++11 в целом можно.
Еще там какие-то расхождения со стандартом в ексепшонах, там нет ключевого слова noexcept, вместо него throw(), хотя в стандарте 98 throw() означает любое исключение, а в С++11 писать throw считается устаревшим -- достаточно только noexcept, таким образом компилятор не будет генерировать дополнительный код для перехвата и сделает программу быстрей, однако в std есть много того что кидает исключения, поэтому где попало noexcept ставить нельзя.

mr.DIMAS 03.10.2014 14:32

Ответ: [TrueHorror] - разработка
 
Цитата:

MSVS 2013 не до конца совместим
Ну я вообще на 2012 студии. Но поддерживаемых фич мне достаточно. Чего только стоит for( auto smth : something ) { } .

Samodelkin 03.10.2014 18:25

Ответ: [TrueHorror] - разработка
 
Да С++11 это почти новый язык, если будешь только фичи добавлять с существующий код -- не раскроешь весь потенциал.
Страуструп в 4 издании говорит что нужно архитектурно новые подходы делать, тогда новые фичи будут как можно лучше ложиться в общий контекст задуманного.

Вообще из своей практики еще могу добавить:
override -- удобно помечать виртуальные функции, чтобы случайно при опечатке не создать похожую, но не виртуальную функцию. Компилятор скажет что такой функции в базовом классе нет.
final -- помечать класс что он финальный, в этом случае можно не делать деструктор virtual (обычно делали, чтобы не забыть когда начнешь наследовать), теперь если попытаешься наследовать то нужно будет убрать final, и сразу автоматически это напоминает проверить деструктор на virtual.
списки инициализации -- теперь переменные рекомендуется инициализировать вот так:
int a { 10 };
потому что у списков инициализации более строгая типизация, и например в данном случае:
char a { 257 };
будет ошибка, и ты не накосячишь с переполнением значения.
К тому же списки инициализаций напрямую инициализируют переменную без промежуточных присваиваний.
Тоже относиться к классам.
Также полезны variadic templates -- они заменяют собой функции с переменным числом аргументов. Не часто, но кое-где я нашел им применение.
Ексепшены стали удобней и быстрее.
Например можно оформить конструктор так:
B::B( void ) try : A() { //code } catch ( const except& ex ) { //deinit throw; }
Таким образом мы в случае неудачи восстанавливаем состояние объекта локально, затем передаем ексепшен вызывающему коду, для более глобальных действий. Под try попадает также и конструктор базового класса.

Еще в классах можно создавать конструкторы перемещения и операторы присваивания с перемещением -- однако я пока не нашел им широкого применения.
Ещё, раньше чтобы скрыть конструктор копирования и оператор присваивания (обычные) не писали их тело, таким образом компилятор выдавал ошибку компиляции, теперь же можно помечать такие функции A( const A& a ) = delete;
Лямбда местами удобно использовать, например при обобщении кода внутри функций.

Применение библиотеки стало намного лучше и читабельней.
Так что теперь имхо её можно применять чаще, даже внутри движка, за исключением очень критических к производительности мест.

Вот но в общем если относиться к С++11 только как к дополнительным фичам, не получится раскрыть его возможности полностью.

mr.DIMAS 03.10.2014 20:44

Ответ: [TrueHorror] - разработка
 
Эх, открыл бы я для себя C++11 раньше, в начале написания движка, то архитектурно он был бы другим нежели сейчас. А так мне только фичи можно использовать, ибо архитектура уже есть и каждое ее изменение проходит болезненно. Когда доделаю игру, тогда вполне возможно начнется глобальный рефакторинг движка с учетом нового стандарта.

Samodelkin 03.10.2014 22:14

Ответ: [TrueHorror] - разработка
 
Можно разделить движок на отдельные модули, так чтобы циклически производить рефакторинг и модернизацию каждого, в относительно короткий по времени цикл.

Стараться держать общий объем кода в пределах своих возможностей, чтобы не терять контроля и гибкости разработки.
Одним словом не делать "на века", а с вероятностью что может через месяц-два придется заменить/переписать/модернизировать.
Таким образом стараться минимизировать кол-во своего кода, пользоваться функционалом других библиотек, убирать устаревшие или "запасные" возможности, которыми на вряд ли будут пользоваться.

Я например задаю себе вопрос, если гипотетически сурцы исчезнут, за сколько я могу с нуля восстановить коды движка.
Если в пределах 2-3 месяцев, значит объем кодов движка в целом удовлетворяет моим возможностям.

В целом есть много способов улучшать и увеличивать возможности движка, без увеличения объёма исходного кода.

mr.DIMAS 05.10.2014 17:33

Ответ: [TrueHorror] - разработка
 
Вложений: 4
Улучшаю существующие уровни. На сей раз это шахта. Добавил крепь на своды и дощатый пол.

mr.DIMAS 06.10.2014 22:23

Ответ: [TrueHorror] - разработка
 
Промежуточная версия. Потестируйте на баги.

http://tempfile.ru/file/3095859

tirarex 07.10.2014 00:03

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Поругалась что OpenAL32 не юзабельна и вылетела.

Upd Удалил и заработало

В общем после начала напряг вид руки и все еще звук зажигалки.
Пошел в тоннель там меня завалило и появилось задание проверить вход , после того как сходил ко входу оно не исчезло.
Вошел в пещеры - фпс как рукой сняло.
Вседозволенность перемещения это не очень крутая фича без подсказок куда идти.
Полез по лестнице - пролез через нее и цеплялся не знай чем (скрины).
После лестницы остались звуки топанья по металу.
Зарядил фонарик керосином.
Добрался до детонатора но он не взрывается ( предполагаю что бомбу надо сделать)

Запустил игру в окне а его двигать нельзя :4to:

ARA 07.10.2014 00:07

Ответ: [TrueHorror] - разработка
 
Энжой йор свой движок :(

mr.DIMAS 07.10.2014 00:44

Ответ: [TrueHorror] - разработка
 
Блин я на восьмерке не тестировал. Вообще хз че может быть. Может поможет удаление OpenAL32.dll?

upd. Поиск сказал что это из-за перемешивания 32 битных и 64 битных библиотек. Хотя я компилировал всё в 32 бита.

И еще - поставь http://www.microsoft.com/ru-ru/downl....aspx?id=30679

Цитата:

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

tirarex 07.10.2014 01:13

Ответ: [TrueHorror] - разработка
 
Собрал все в стену и взорвал и фпс вернулся =)
Погулял и собрал 2 предохранителя , вернулся поставить и вылет.
Скажи как попасть сразу на какой то левл !

mr.DIMAS 07.10.2014 01:23

Ответ: [TrueHorror] - разработка
 
Цитата:

Погулял и собрал 2 предохранителя , вернулся поставить и вылет.
Вылет? Опиши ситуацию, как произошел?
Цитата:

Скажи как попасть сразу на какой то левл !
Ну никак пока. Хотя я добавлю в mine.cfg номер уровня для загрузки.


Часовой пояс GMT +4, время: 16:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot