моя 2д игра и на слабых ПК без особых оптимизаций пойдёт
может быть тогда лучше игру доделывать)) По теме: нужна метрика чтобы понять где больше всего времени требуется, а затем уже думать что делать с тормозом, потому что одно дело вынести физику, а другое дело разгрузить ИИ (к примеру через кадр глобальное обновление, а НПС обновлять в зависимости от дистанции до игрока). Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
В отдельные потоки можно вынести асинхронные задачи, к примеру обновление звука (если звук воспроизводится потоково), то есть то, что не требует синхронизации, ибо синхронизация требует времени и ее неправильная организация может только навредить. Если много геометрии и вообще всего того что будет рисоваться, то самое тормознутое место это именно сам рендер. Главный цикл надо оптимизировать: сначала как можно больше рендера (можно совместно с просчетами, чтобы синхронизировать работу gpu и cpu), а после уже основные просчеты (физика, ИИ, просчеты видимости и прочее). Пока gpu будет рисовать cpu будет считать, а потом кто-то кого-то ждет)) Думаю после оптимизации главного цикла будет намного легче понять что нужно куда выносить и надо ли вообще это делать.
А вообще что больше всего тормозит? Метрика есть?
Метрика тормозов из нашего движка SkyXEngine:
Кстати ИИ необязательно каждый кадр считать. Если вспомнить игры серии Сталкер, то там НПС порой притормаживают, из этого можно сделать вывод что ИИ считается не каждый кадр (может быть чем ближе к игроку тем чаще, но хз). Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Вторник, 07 Ноября 2017, 08:51
Насколько я знаю, C++ почти весь состоит из undefined behaivor
Это один из самых популярных языков, а UB это лишь из-за отсутствия опыта и навыков. Любой язык можно свести на нет при неумелом подходе.
Добавлено (31 октября 2017, 09:17) ---------------------------------------------
ЦитатаFlyOfFly ()
в C++ тоже некоторые моменты остаются на волю компилятора и программист не может быть точно уверен, что и как вызываться будет и в каком порядке.
Это искусственный интеллект, без него никак)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
drcrack, скажи это ребятам из Microsoft Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 30 Октября 2017, 15:10
Неужели в С++ все так плохо, что это действительно все еще актуально — вписывать тип переменной в ее имя?
Суть не в типе переменной, а в префиксе, для того чтобы добавить дополнительную идентификацию. Понятное дело когда кода до 1000 строк, то это просто глупо, но когда счет идет десятками тысяч, и в разработке участвует не один человек (особенно удаленно) то это становится уже серьезной проблемой. Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Суть (имхо) венгерской нотации в том, чтобы ставить префиксы, по которым идентифицировать имя, да и для автодополнения очень удобно, к примеру в классе проще написать m и будут выведены все возможные мемберы класса, нежели this->. Помнишь что переменная int типа и достаточно написать i и будут выведены все доступные твои intы. Не можешь вспомнить название класса, вводишь C и автодополнение показывается доступные. И так далее.
Цитатаpuksus ()
Чёт как-то стрёмно выглядит подчёркивание в конце мембера. ... В общем, очень-очень много спорных моментов. А так в паре мест кое-что полезное почерпнул.
Согласен, надо брать то что нравится/более подходит под конкретную ситуацию, идеала не бывает.
P.S. Если интересно почитай наш стандарт оформления кода, его мы сейчас внедряем в наш движок, и опробовали на нашем скриптовом языке (ссылки в подписи), и честно сказать стандартом довольны, код единообразный, хоть и есть некоторые отступления)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 30 Октября 2017, 11:23
Как на счет стандарта оформления кода? К примеру вот https://habrahabr.ru/post/172091/ Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Воскресенье, 29 Октября 2017, 23:52
Окей тогда скажите какие профессии востребованы в разработке игр. Скажу так мне не очень нравится 3d моделирование и программирование. Мне больше нравится описывать события, персонажей, придумывать разные истории. геймплей, игровая механика, сюжет, (Игры) и так далее. Уж на это у меня фантазия богатая. Есть какие нибудь профессии в этой сфере желательно востребование?
ИМХО, не понимая что такое программирование трудно будет общаться с программистами, и не зная что такое 3d моделирование не понять моделлеров. Попробуй сделать какую-нибудь мелкую игру сам, хоть немного освой язык программирования, а когда сделаешь, поймешь, надо оно тебе или нет. Плюс будет в том что ты уже хоть немного знаешь язык программирования, а на этом можно подзаработать)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
В общем случае нужно цвет и плотность линейного тумана задать, а также сами частицы спавнить в радиусе метров 20 от камеры, выше уровня поверхности (по которой идет игрок) чтобы направление движения было отрицательным по оси Y и случайный разброс с отклонениями по осям X и Z. Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Ну и я поделюсь)) Мы с товарищем недавно наш скриптовый язык s4g довели до версии 0.9.2 тема здесь на форуме Сейчас за движок опять браться будем. denykalinin, красиво)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
s4g - скриптовый язык программирования Язык программирования: C++ 11 Платформа: начиная с Windows XP и выше Лицензия: свободная (MIT с некоторыми дополнениями) Сайт:ссылка Пользовательская документация:ссылка Документация для программистов:ссылка Быстрый старт:ссылка Репозиторий:ссылка
s4g (scripts for games) – высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++. s4g создавался как мощный, гибкий, быстрый и простой скриптовый язык (конечно же в балансе всего этого), предоставляющий достаточные выразительные средства для решения различных задач. Как такового понятия входа в программу нет, поэтому могут выполняться отдельные участки кода, такие как функции. s4g легко расширяем посредством предоставляемого набора функций (api). Файл s4g_lib_std.h яркий пример простого расширения языка, в данном файле происходит экспорт языковых функций в скриптовую систему. s4g поддерживает препроцесс похожий на C++. Тип виртуальной машины – стековая. При разработке был сделан особый упор на real-time производительность исполнения кода и отчетности скриптовой системы перед программистом, так как изначальная цель использования языка в среде критичной по времени исполнения. Является свободно распространяемым программным средством по лицензии MIT (см. файл LICENSE).
На данный момент версия 0.9.2 то есть еще не все сделано, и язык еще немного сыроват, но это уже более стабильная версия. Требуются дополнительные тесты. Кому не трудно протестируйте)) Язык будем потихоньку дорабатывать.
Несколько примеров:
Код
//простой пример работы с препроцессом
#define TEST2(str) #str #define TEST(a, b) TEST2(a ## b) print(TEST(qwe, asd) + "\n");
//пример работы с функциями с замыканием и с функция с переменным количеством аргументов
var closure1 = function () { var a = 10; var c = 1;
var fc = function(arg1) extern a,c { return a+arg1-c; }; a = 15;
var fc2 = function(arg1) extern a,c { return a+arg1*c; }; var arrfunc = {fc;fc2;}; return arrfunc; };
var arrfunc = closure1(); var nfc = arrfunc:[0]; var nfc2 = arrfunc:[1]; print("closure " + tostring(nfc(10)) + "\n"); print("closure " + tostring(nfc2(10)) + "\n");
var mmarg = function (...) { var f1 = function(arg1) { var f2 = function(a1) { return a1*a1; };
return f2(arg1); };
print("f1 table length is " + tostring(f1(count(args))) + "\n"); print("f1 argument number 1 is " + tostring(f1(args:[1])) + "\n"); };
mmarg(1,2,3,4,5,6);
Возможно местами код не элегантный, а алгоритмы не совершенны, но мы делали для себя, а потом решили выпустить в open source)) В некоторых местах мы могли оказаться не настолько компетентны на сколько хотелось бы. Выслушаем объективные комментарии, примем к сведению. Комментарии обсуждения целесообразности разработки не принимаем)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 02 Октября 2017, 09:05
A* хорошо, сам использую, чрезвычайно прост, эвристика методом Манхеттена вполне сойдет. Многоэтажность поддерживается. Еще можно глянуть алгоритм Дейкстры, тоже интересный подход, в теории с ним знаком, на практике не использовал. Гугли "A* для новичков", первая ссылка.
Добавлено (25 сентября 2017, 17:16) --------------------------------------------- Если интересует вопрос как поделить пространство и понять где можно ходить, а где нет, тогда посмотри в сторону NavMesh или AI regular grid (сам использую это).
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
если не меньше) Еще интересно почему именно программный рендер? Почему не хочешь сосредоточится именно на игровой составляющей и использовать аппаратные возможности рендера? Это же ускорило бы релиз, не? Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
само собой)) А какое средство используешь? Какие функции, откуда? В режиме ядра? Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Vuvk, качнул архив (v006 Win32), пытаюсь распаковать WinRarом а он мне:
! C:\...\RGC_006.7z: Неизвестный метод в fonts\FreeSans.ttf ! C:\...\RGC_006.7z: Неизвестный метод в full_screen.bat ! C:\...\RGC_006.7z: Неизвестный метод в hardware.bat ! C:\...\RGC_006.7z: Неизвестный метод в high_quality.bat ! C:\...\RGC_006.7z: Неизвестный метод в images\sky.bmp ! C:\...\RGC_006.7z: Неизвестный метод в images\texture0.bmp ! C:\...\RGC_006.7z: Неизвестный метод в images\texture1.bmp ! C:\...\RGC_006.7z: Неизвестный метод в images\texture2.bmp ! C:\...\RGC_006.7z: Неизвестный метод в images\texture3.bmp ! C:\...\RGC_006.7z: Неизвестный метод в libfreetype-6.dll ! C:\...\RGC_006.7z: Неизвестный метод в rgm.exe ! C:\...\RGC_006.7z: Неизвестный метод в rgm_c11_threads.exe ! C:\...\RGC_006.7z: Неизвестный метод в rgm_one_thread.exe ! C:\...\RGC_006.7z: Неизвестный метод в rgm_sdl_threads.exe ! C:\...\RGC_006.7z: Неизвестный метод в SDL2.dll ! C:\...\RGC_006.7z: Неизвестный метод в SDL2_ttf.dll ! C:\...\RGC_006.7z: Неизвестный метод в zlib1.dll
Заново скачал, то же самое. Я не силен в кроссплатформенном программировании, но почему бы не сделать все на Си? А то что придется устанавливать что-то лишнее это уже юзеры пусть думают, зато все на одном языке. Но это имхо, возможно ошибочное, однозначно тебе виднее)) Что используешь для программного рендера (как-то библиотека)? Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Пятница, 08 Сентября 2017, 08:29
Vuvk, скрины класс! Мне безумно интересно как будешь прикручивать лайтмапы? Сам будешь считать освещение или как? Psycho, интересно смотрится) Artalasky, красочно, думаю геймплей будет не менее яркий))
Рендер нашего движка SkyXEngine (0.9.0) (геометрия и текстуры чужие):
Один из старых скринов рендера (года 3 назад наверное)
Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Суббота, 02 Сентября 2017, 22:07