![]() |
Ответ: [TrueHorror] - разработка
Цитата:
Хотя я сам тоже через DirectInput всё сделал, но вот сейчас буду переделывать. //================================================== ====== К тому же у тебя в MagicInput обращение к клавиатуре через GetDeviceState -- при низком FPS у тебя нажатия будут выпадать или будет неправильная очередность при быстром наборе текста. Через состояние устройства можно опрашивать только аналоговые устройства (мышь, рули, контроллеры и т.п.) |
Ответ: [TrueHorror] - разработка
Долго отдыхал от игродела. Играл в дарксоулс 2. Но настало время вернуться.
Прошел свою игрушку с не затуманенными мозгами и понял, что очень мало интерактива в игре. Поэтому добавил разные интерактивные объекты: 1) Лестницы 2) Двери( есть и запертые двери, но ко всем есть ключи - ибо это не сайлент хилл :-D ) 3) Вентиляционные ходы( общее название, на самом деле можно будет ползать и в узких проходах - например в трещине в скале ) По лестницами можно лазать вверх-вниз. По вентиляционным ходам можно ползать туда-сюда. Вообще полезно отдыхать от геймдева - сразу свежие мысли в голову приходят. |
Ответ: [TrueHorror] - разработка
Как на ваш взгляд: стоит ли делать видимым тело персонажа, и соответственно анимировать его для разных действий - типа того, как сделано в Outlast?
P.S. Переехал на C++11 и Bullet Physics 2.81. Сделал в движке строгую типизацию - до этого все хендлы объектов из движка передавались в виде указателя на объект reinterpret_cast к int. В итоге появлялись трудно уловимые баги. |
Ответ: [TrueHorror] - разработка
Цитата:
Я думаю пока лучше экономить. Цитата:
Еще там какие-то расхождения со стандартом в ексепшонах, там нет ключевого слова noexcept, вместо него throw(), хотя в стандарте 98 throw() означает любое исключение, а в С++11 писать throw считается устаревшим -- достаточно только noexcept, таким образом компилятор не будет генерировать дополнительный код для перехвата и сделает программу быстрей, однако в std есть много того что кидает исключения, поэтому где попало noexcept ставить нельзя. |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [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 только как к дополнительным фичам, не получится раскрыть его возможности полностью. |
Ответ: [TrueHorror] - разработка
Эх, открыл бы я для себя C++11 раньше, в начале написания движка, то архитектурно он был бы другим нежели сейчас. А так мне только фичи можно использовать, ибо архитектура уже есть и каждое ее изменение проходит болезненно. Когда доделаю игру, тогда вполне возможно начнется глобальный рефакторинг движка с учетом нового стандарта.
|
Ответ: [TrueHorror] - разработка
Можно разделить движок на отдельные модули, так чтобы циклически производить рефакторинг и модернизацию каждого, в относительно короткий по времени цикл.
Стараться держать общий объем кода в пределах своих возможностей, чтобы не терять контроля и гибкости разработки. Одним словом не делать "на века", а с вероятностью что может через месяц-два придется заменить/переписать/модернизировать. Таким образом стараться минимизировать кол-во своего кода, пользоваться функционалом других библиотек, убирать устаревшие или "запасные" возможности, которыми на вряд ли будут пользоваться. Я например задаю себе вопрос, если гипотетически сурцы исчезнут, за сколько я могу с нуля восстановить коды движка. Если в пределах 2-3 месяцев, значит объем кодов движка в целом удовлетворяет моим возможностям. В целом есть много способов улучшать и увеличивать возможности движка, без увеличения объёма исходного кода. |
Ответ: [TrueHorror] - разработка
Вложений: 4
Улучшаю существующие уровни. На сей раз это шахта. Добавил крепь на своды и дощатый пол.
|
Ответ: [TrueHorror] - разработка
|
Ответ: [TrueHorror] - разработка
Вложений: 1
Поругалась что OpenAL32 не юзабельна и вылетела.
Upd Удалил и заработало В общем после начала напряг вид руки и все еще звук зажигалки. Пошел в тоннель там меня завалило и появилось задание проверить вход , после того как сходил ко входу оно не исчезло. Вошел в пещеры - фпс как рукой сняло. Вседозволенность перемещения это не очень крутая фича без подсказок куда идти. Полез по лестнице - пролез через нее и цеплялся не знай чем (скрины). После лестницы остались звуки топанья по металу. Зарядил фонарик керосином. Добрался до детонатора но он не взрывается ( предполагаю что бомбу надо сделать) Запустил игру в окне а его двигать нельзя :4to: |
Ответ: [TrueHorror] - разработка
Энжой йор свой движок :(
![]() |
Ответ: [TrueHorror] - разработка
Блин я на восьмерке не тестировал. Вообще хз че может быть. Может поможет удаление OpenAL32.dll?
upd. Поиск сказал что это из-за перемешивания 32 битных и 64 битных библиотек. Хотя я компилировал всё в 32 бита. И еще - поставь http://www.microsoft.com/ru-ru/downl....aspx?id=30679 Цитата:
|
Ответ: [TrueHorror] - разработка
Собрал все в стену и взорвал и фпс вернулся =)
Погулял и собрал 2 предохранителя , вернулся поставить и вылет. Скажи как попасть сразу на какой то левл ! |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 16:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot