Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Курилка программистов
GAMEINATOR forums > Soft, Hard и периферия > Hard & Soft
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
Молния в вакууме
Цитата(refuse @ 28.08.2016, 22:08) *
суровый код quake на чистом си

Чистый C - это круто.
Однажды я скомпилировал ваш движок на C борландовским компилятором, и он запускался под Windows NT 3.51. Меня это очень впечатлило. Только в этом движке мне не понравились сложные форматы файлов, требование высокой версии OpenGL и ini-конфиги, они конечно подходят для хранения простых настроек, но если в них хранить что-то более сложное всё превращается в нечитабельную кашу. Поэтому я решил сделать свой такой же, только с простыми форматами файлов, OpenGL 1.1, и конфигами с синтаксисом похожим на LUA. Т.к. использовать луа только для конфигов расточительно, я написал свой парсер похожего формата.
В итоге форматом текстур стал TGA, форматом моделей OGF(не то чтобы не очень нравился этот формат, но он вполне простой) а ресурсы хранились в обычном zip-архиве. Минимально необходимая версия OpenGL - 1.0. Так что можно портировать даже под самые древние платформы. Это всё запускалось под Windows, OS/2 и Linux(только через GLUT), и собиралось разными компиляторами.
(BCC, MSVC 5.0, Watcom, GCC)

C С++ такое бы не прокатило. Он плохо портируем между разными компиляторами.
Например новые компиляторы поймут такой код:
Код
for(int i = 0; i < 10; i++) puts("for 1");
for(int i = 0; i < 10; i++) puts("for 2");
for(int i = 0; i < 10; i++) puts("for 3");

Старые будут ругаться на повторное объяление i. Там надо делать так:
Код
for(int i = 0; i < 10; i++) puts("for 1");
for(i = 0; i < 10; i++) puts("for 2");
for(i = 0; i < 10; i++) puts("for 3");

Такой вариант устроит всех:
Код
int i;

for(i = 0; i < 10; i++) puts("for 1");
for(i = 0; i < 10; i++) puts("for 2");
for(i = 0; i < 10; i++) puts("for 3");


Только вот это уже код на С, а не на C++.
autistic
Цитата(saas @ 29.08.2016, 01:30) *
Чистый C - это круто.

Сам Кармак признал, что С++ круче!
Цитата
In some ways, I still think the Quake 3 code is cleaner, as a final evolution of my C style, rather than the first iteration of my C++ style, but it may be more of a factor of the smaller total line count, or the fact that I haven’t really looked at it in a decade. I do think "good C++" is better than "good C" from a readability standpoint, all other things being equal.

http://www.phoronix.com/scan.php?page=news...&px=MTI3NDQ
1001v
Че пацаны, программисты?
RayTwitty
Тема кстати с таким же названием уже была.
OlegatoR
Цитата(RayTwitty @ 29.08.2016, 02:27) *
Тема кстати с таким же названием уже была.

то было Писькомерство кулкодеров
Cossack-HD
Хочу запилить 2D движок с API OpenGL. Думал пилить на C# ибо знаком с ним, нашёл всё необходимое для привинчивания OpenGL (есть несколько альтернатив), но OpenGL работает нативно только с C++. Насколько сложнее работать с C++, чем C#?
Объекты будут такие: ГГ, 2D платформы с текстурами и вершинами для просчёта коллизий, всякие там партикловые projectlies. Окружающую среду хочу стримить вторым потоком по мере продвижения, из раздельных секторов карты. Нужен файлоый I/O и внутренний редактор уровней с GUI. Где это проще реализовать?
autistic
Cossack-HD, можно написать низкоуровневые ф-ии отрисовки графики на Си, а всё остальное, включая загрузку ресурсов, обработку пользовательского ввода, логику взаимодействия с игровыми объектами и т.д. реализовать на C#. Для этого используют P/Invoke (Platform Invocation Services), это такой механизм, который позволяет вызывать неуправляемый код из управляемого. У этого подхода есть и минусы - нельзя передавать данные из управляемого кода в неуправляемый привычным способом, для этого придется использовать Маршалинг, что потребует дополнительных усилий, но учитывая, что для 2D графики много ф-ий рендерера не понадобится, то связанными с маршалингом хлопотами можно пренебречь.
Cossack-HD
Цитата(refuse @ 29.08.2016, 10:36) *
Cossack-HD, можно написать низкоуровневые ф-ии отрисовки графики на Си, а всё остальное, включая загрузку ресурсов, обработку пользовательского ввода, логику взаимодействия с игровыми объектами и т.д. реализовать на C#. Для этого используют P/Invoke (Platform Invocation Services), это такой механизм, который позволяет вызывать неуправляемый код из управляемого. У этого подхода есть и минусы - нельзя передавать данные из управляемого кода в неуправляемый привычным способом, для этого придется использовать Маршалинг, что потребует дополнительных усилий, но учитывая, что для 2D графики много ф-ий рендерера не понадобится, то связанными с маршалингом хлопотами можно пренебречь.

Я особо мощного графония не планирую. Я так понимаю, низкоуровневые функции помогают при обработке большого количества объектов в кадре? Это поэтому Кармак писал части движка на ассемблере? Не планирую использовать много объектов, но буду иметь ввиду.
Я могу тупо загрузить "один жыпег" как основу куска уровня и закрепить его с collision map, многослойность картинки можно обеспечить n-количеством "жыпегов" с различной близостью к viewport. Движок всё таки должен работать как 3D.
Neo][
Cossack-HD, а почему хочешь пилить сам, спортивный интерес?

Ну и позанудствую, что значит?
Цитата(Cossack-HD @ 29.08.2016, 09:53) *
но OpenGL работает нативно только с C++



Это я к тому, что бери готовый движок или бери готовый байндинг к своему языку и не ищи себе приключений smile.gif
Cossack-HD
Цитата(Neo][ @ 29.08.2016, 13:28) *

Cossack-HD, а почему хочешь пилить сам, спортивный интерес?

Ну и позанудствую, что значит?
Цитата(Cossack-HD @ 29.08.2016, 09:53) *
но OpenGL работает нативно только с C++

Это я к тому, что бери готовый движок или бери готовый байндинг к своему языку и не ищи себе приключений smile.gif

Все байндинги для OpenGL, кроме C++, неофициальные. Я так понимаю, особой разницы между байндингами нет. Просто возьму тот, который тянет более современную GL.

Пилить самостоятельно - да, спортивный интерес. Сейчас у меня начался курс профессиональной подготовки (дизайнер ПО), в колледже выделены отдельные помещения для нашей группы и VIP ключи до 8 вечера, офис для студентов короче, нужно пользоваться возможностью biggrin.gif Насчёт движка ничего особо сложного - один поток для передвижения объекта и проверки коллизий, по началу могу прямо в код вписывать геометрию, I/O файлов и редактор уже потом. Прверку коллизий хочу сделать "лучиками", потом буду прикручивать больше фичей, как пойдёт smile.gif
Насколько сложно сделать радиальную проверку коллизий для окружности, с return на угол столкновения относительно центра/поверхности окружности?
autistic
Цитата(Cossack-HD @ 29.08.2016, 13:09) *
Я так понимаю, низкоуровневые функции помогают при обработке большого количества объектов в кадре?

Не совсем. Суть заключается в том, что на си пишутся функции, обеспечивающие низкоуровневый вывод графики. В теле этих функций происходит вызов нативных ф-ий OpenGL, а наружу поставляется простой интерфейс из нескольких таких ф-ий, к примеру:
Код
int Init(uint64_t handle);
void Shutdown();
void SetViewport(int x, int y, int w, int h);
int CreatePrimitive(Triangle *triangles);
void DrawPrimitive(int handle);
void DeletePrimitive(int handle);
int CreateTexture(int w, int h, char *pixels);
int BindTexture(int handle);
void DeleteTexture(int handle);
void SetTransforms(float *matrix);
void Render();


Потом эта библиотека цепляется к приложению на С# и вся высокоуровневая работа с графикой (спрайты, анимация, очередь отрисовки и т.д.) реализуется уже там.

В качестве примера реализации такого АПИ советую уроки от NeHe
Neo][
Цитата(Cossack-HD @ 29.08.2016, 13:41) *
Все байндинги для OpenGL, кроме C++, неофициальные. Я так понимаю, особой разницы между байндингами нет. Просто возьму тот, который тянет более современную GL.

Cossack-HD, ну разрабам не всегда с руки реализовывать API-обёртки под великое множество языков. По поводу разницы между байндингами - всё зависит от того зачем этим занимался автор. Взять например GLScene, числится, как байндинг для pascal-based языков, но я бы не назвал это байндингом, слишком высокоуровнево.

Цитата(Cossack-HD @ 29.08.2016, 13:41) *
Насчёт движка ничего особо сложного - один поток для передвижения объекта и проверки коллизий, по началу могу прямо в код вписывать геометрию, I/O файлов и редактор уже потом. Прверку коллизий хочу сделать "лучиками", потом буду прикручивать больше фичей, как пойдёт

А где цикл отрисовки? А в каком потоке он будет? А как будет обрабатываться ввод? А как будут синхронизироваться результаты расчётов из разных потоков? И т.п. вопросы конечно наигранные, но тем не менее... Поэтому я и предлагал взять готовый движок и на основе его разбираться с тем, как это всё организованно и реализовывать уже саму игру. Но, если реализация какой-либо законченной игры не является целью, тогда можно и понабивать себе шишки wink.gif


Цитата(Cossack-HD @ 29.08.2016, 13:41) *
Насколько сложно сделать радиальную проверку коллизий для окружности, с return на угол столкновения относительно центра/поверхности окружности?

Не совсем понял, что такое "радиальная проверка", "поверхность окружности"... Но в целом в коллизиях нет ничего сложного, все формулы гуглятся на раз )
Cossack-HD
refuse, если запилить такую прослойку, то можно пользоваться нативным байндингом C++/OpenGL, а основная разработка может быть на C#? Удобно.

Neo][, я перечислил список базовых функций. Такую игрульку можно хоть на простом canvas рисовать, без использования текстур, даже FPS будет играбельный. Не вижу особого смысла разбивать игру на много потоков, сайдскроллер можно делать секвентивно. Подгрузку ресурсов "на лету" можно вынести на второй поток, и до кучи звук и ИИ на свои потоки.
Neo][
Cossack-HD, что-то ты меня совсем запутал. Зачем opengl, если можно и на обычной канве рисовать? Не видишь смысла в разбиении на потоки, но ресурсы, звук, ии можно вынести в отдельные потоки. Звучит противоречиво.

Я же писал про готовые движки и задавал надуманные вопросы потому что OpenGL - это не на канве рисовать. Посмотри любой урок, показывающий как нарисовать кубик с текстурой на ogl, возможно удивишься количеству кода.
Cossack-HD
Цитата(Neo][ @ 29.08.2016, 15:29) *

Cossack-HD, что-то ты меня совсем запутал. Зачем opengl, если можно и на обычной канве рисовать? Не видишь смысла в разбиении на потоки, но ресурсы, звук, ии можно вынести в отдельные потоки. Звучит противоречиво.

Я же писал про готовые движки и задавал надуманные вопросы потому что OpenGL - это не на канве рисовать. Посмотри любой урок, показывающий как нарисовать кубик с текстурой на ogl, возможно удивишься количеству кода.

На канве без текстур и без шейдеров, можно просто сделать однопоточный гейм-дизайн прототип. На OpenGL да, инициализация рендера, стирание буфера вывода, установка view port, установка вершин и групп, назначение текстур, отрисовка по z-буферу (или как там) и прочее прочее. Годный туториал уже нашёл - он настолько для чайников, что начинается с Hello World в Windows Forms Application ;)
Что я имел ввиду - игра вполне может работать в одном потоке и с GL рендером, а разбить на потоки можно те вещи, которые между собой связаны минимально. Глубокая оптимизация в планах не стоит.
Молния в вакууме
На мой взгляд испоьзовать OpenGL для 2D графики это overkill. Если только для кросспатформенности.
Под виндой есть аж три специальных API для 2D графики. Это GDI, DirectDraw и Direct2D. Но использовать их имеет смысл только если не устраивает в плане производительности этот ваш canvas. smile.gif
abramcumner
Цитата(saas @ 28.08.2016, 23:30) *
Старые будут ругаться на повторное объяление i. Там надо делать так:

Это же с++. Для старых компиляторов пишется костыль:
Код
#define for if (false);else for

И вот уже ругани на повторные объявления нет biggrin.gif
Neo][
Цитата(Cossack-HD @ 29.08.2016, 15:41) *
Что я имел ввиду - игра вполне может работать в одном потоке и с GL рендером, а разбить на потоки можно те вещи, которые между собой связаны минимально. Глубокая оптимизация в планах не стоит.

Cossack-HD, вот только всё тобой перечисленное связанно максимально wink.gif
Без ресурсов нечего рисовать. На экране происходит столкновение, а из колонок тишина. Тяжёлый алгоритм ИИ или коллизии не успел отработать, а рендер уже рисует следующий кадр. Движок - это комплексная система в которой всё взаимосвязано и это очень не тривиальная задача написать многопоточную риалтайм систему. Уж лучше не заморачивайся с потоками и делай всё в одном.

Цитата(abramcumner @ 29.08.2016, 16:09) *
Это же с++. Для старых компиляторов пишется костыль:
Код
#define for if (false);else for
И вот уже ругани на повторные объявления нет

abramcumner, воу воу полегче, видел многое, но вот этот трюк 2guns.gif
Cossack-HD
Цитата(saas @ 29.08.2016, 16:04) *
На мой взгляд испоьзовать OpenGL для 2D графики это overkill. Если только для кросспатформенности.
Под виндой есть аж три специальных API для 2D графики. Это GDI, DirectDraw и Direct2D. Но использовать их имеет смысл только если не устраивает в плане производительности этот ваш canvas. smile.gif

OpenGL нужен, чтобы учиться основам 3D графона, да и кросс-платформенность тоже интересует, да и "всякие там Vulkan'ы", которые растут из GL. Я подумал, что лучше начинать с "2D" игр, с редким использованием 3D объектов. Я по AutoCAD знаю, как мозг ломается и перегревается при работе в 3D. В сайдскроллерах хорошо смотрятся 3D объекты для фона (горизонтальная поверхность с перспективой) - это очень актуально для открытых пространств, когда хочется показать глубину мира: тыц. В противном случае, придётся насаживать десятки линий кустиков "друг за другом" - тогда можно даже не думать об уходящей вдаль водной поверхности.
Молния в вакууме
Цитата(saas @ 29.08.2016, 00:30) *
Однажды я скомпилировал ваш движок на C борландовским компилятором

Что-то я опять про него вспомнил. И добавил Direct3D 7 рендер. laugh.gif Just for lulz.

Только архив с Припятью побился, с родным рендером вообще не запускается. (С другой картой всё ОК)
autistic
Цитата(saas @ 04.09.2016, 03:03) *
архив с Припятью побился

Касательно движка есть пара не вполне очевидных моментов:

1. Изначально движок пилился под x86 архитектуру и когда был допилен до запускаемой демо-версии я начал портировать его под ARM. В этот момент выяснилось, что архитектурное решение для парсера двоичных файлов, позаимствованное из хray, не годится для этой платформы т.к. данные считанные из файла в память должны быть выровненны соответствующим образом. В итоге на скорую руку был придуман костыль - при сборке ресурсов данные выравнивались при записи в файл так, словно они размещались в памяти, а при загрузке файл загружался в память целиком и уже после производился его разбор путем раздачи выровненных указателей на эти данные. Позже, я нашел ошибку при сборке ресурсов, в результате которой могла происходить порча памяти во время загрузки этих ресурсов, но к тому моменту работа над движком была приостановлена. Для обеспечения стабильной работы движка необходимо переписать файловую систему так, чтобы вместо раздачи указателей на память данные считывались с диска или копировались из памяти при помощи POSIX ф-ий: memcpy/fread/fwrite

2. В рендерере существовала ошибка при вычислении размеров данных текстуры, в результате некоторые текстуры с мипмапами могли глючить при приближении/удалении камеры, позднее эта ошибка была исправлена этим коммитом но протестировать его не удалось т.к. ресурсы для тестовой сборки к тому моменту были удалены с жесткого диска.
Молния в вакууме
Цитата(refuse @ 04.09.2016, 15:18) *
2. В рендерере существовала ошибка при вычислении размеров данных текстуры, в результате некоторые текстуры с мипмапами могли глючить при приближении/удалении камеры, позднее эта ошибка была исправлена этим коммитом но протестировать его не удалось т.к. ресурсы для тестовой сборки к тому моменту были удалены с жесткого диска.

В версии из репозитория некоторые форматы текстур(DXT) вообще не работают, это из за того что коды форматов в types.h не совпадают c теми что используются в PVR файлах.
Asterix
saas, 4 апдейт для билдера накатывал?
Молния в вакууме
Ray, нет, у меня есть только первый. laugh.gif
autistic
saas, чтот я стал забывать как устроен текстурный менеджер, в ближайшее время постараюсь разобраться что там за проблема с форматом пиксела, о результатах отпишусь.
Молния в вакууме
refuse, да ничего сложного там. Действительно нужен преобразователь, т.е. в texture_read вместо t->format = fomat; написать что-то типа такого:
Код
        switch(format)
        {
            case 0: t->format = PVRTC_2BPP_RGB;     break;
            case 1: t->format = PVRTC_2BPP_RGBA;    break;
            case 2: t->format = PVRTC_4BPP_RGB;     break;
            case 3: t->format = PVRTC_4BPP_RGBA;    break;
            case 4: t->format = PVRTCII_2BPP;       break;
            case 5: t->format = PVRTCII_4BPP;       break;
            case 6: t->format = ETC1;               break;
            case 7: t->format = DXT1;               break;
            case 9: t->format = DXT3;               break;
            case 11: t->format = DXT5;              break;
            case 22: t->format = ETC2_RGB;          break;
            case 23: t->format = ETC2_RGBA;         break;
            case 24: t->format = ETC2_RGBA1;        break;
            case 25: t->format = EACR11U;           break;
            case 26: t->format = EACRG11U;          break;
            default: t->format = -1;
        }
Молния в вакууме
Извинияюсь за даблпост. biggrin.gif

refuse, а каким образом это всё собирается/запускается под Android? Я с этой платформой совсем не знаком..
RayTwitty
Не знаете, есть ли специальный синтаксис для notepad++ для файлов-конфигов? Можно конечно и свой сделать, но если уже есть (по идее должен быть), то зачем изобретать велосипед. Тем не менее, пока не удалось найти подходящего ничего.

Код
[section]
; comment
key = value


З.Ы. с небольшой натяжкой подходит синтаксис от ассемблера.
abramcumner
А чем не подходит MS-INI?
RayTwitty
Цитата(abramcumner @ 19.09.2016, 22:01) *
А чем не подходит MS-INI?

В целом конечно тоже подходит, однако есть моменты когда не определяет как параметр, состоящих из двух частей с разделителем:
Код
key:prop = value

ну и хотелось бы различную подсветку для значений числа, строки... Попробую изменить этот стиль.
RedMagic
RayTwitty, советую еще Sublime Text попробовать, там это тоже просто настраивается. А если много RAM и хороший CPU, то можно и хипстерский Atom попробовать. Т.к. по сути это обычный хромиум, то там тоже можно все настроить быстро и красиво.
NEXOR
Цитата(STALKER2011x @ 20.09.2016, 08:40) *
хипстерский Atom


Не знаю почему все его так хвалят, я попробовал и он очень мне не понравился + там странная вертикальная белая полоска почти по средине экрана с кодом. Крч вернулся на саблайм)
NatteFrost
Несколько лет назад я вел свои эксперименты с рендером объектов сталкера под разные движки (dx7-8-9 ffp, dx8-9 sm1.1-sm2.0, gl, allegro, irrlicht, snapgraphics gl) и платформы - win-dos-os2. Пересобирал двиг ТЧ (вернул g_spawn из билда 2571 и проч.) - на форуме было выложено.
http://www.gameru.net/forum/index.php?showtopic=33123
RayTwitty
Цитата(STALKER2011x @ 20.09.2016, 08:40) *
советую еще Sublime Text попробовать

Сегодня увидел у знакомого, пришел домой, заценил - пока нравится. Интересно, что тут по умолчанию стоит подсветка синтаксиса Monokai, которую я для себя когда-то выбрал путем долгого отбора biggrin.gif

Кстати, почему-то в стоке нет стиля для ini файлов, поэтому проблема отсюда решается установкой стороннего синтаксиса: https://github.com/clintberry/sublime-text-2-ini (для 3 версии тоже катит).

З.Ы. Зато присутствует адекватный Monokai для Lua. В notepad++ мне приходилось его ручками допиливать (некоторые ключевые слова языка почти сливались с фоном etc).
RayTwitty
Подход к настройкам радует - слева дефолтные значения с описанием, справа пользовательские. Причем дефолт в режиме readonly, сломать случайно не получится.
Немного допилил под себя:
Код
{
    //"font_size": 13,
    "show_encoding": true,
    "fallback_encoding": "Cyrillic (Windows 1251)",
    "caret_style": "phase",
    "highlight_line": true,
    "highlight_modified_tabs": true,
    "draw_minimap_border": true,
    "always_show_minimap_viewport": true,
}
RedMagic
Еще один огромный плюс Sublime Text, он выполняет самую важную задачу которую только может сделать текстовый редактор - сохранение результатов работы. У меня несколько раз во время работы в Sublime Text выключался ПК (перебои с напряжением), и только он смог полностью сохранить все изменения. Такое не могут ни Notepad+, ни даже VS и Android Studio, они тупо делают авто сохранение раз в X минут. И в случае чего - велика вероятность повреждения данных, из-за чего приходится заново все восстанавливать. Хоть потеря пары минут работы несущественна, но все равно неприятно.
RayTwitty
STALKER2011x, сподвигло поставить ещё и то, что в notepad++ после одного из последних апдейтов начались какие-то проблемы с кодировкой. Точнее, я склоняюсь к тому, что проблема была в старой версии (2007 года, которую я когда-то скачал и не обновлял с тех пор). Видимо в последней версии (спустя почти 10 лет) изменились правила пересохранения файлов и установки дефолтных кодировок.
В sublime с этим как-то прозрачнее, ибо все достаточно грамотно настроено и прокомментировано разрабами, плюс можно задать свою кодировку для неопознанных файлов.

З.Ы. вот кстати стиль для MASM, которого тоже нет по дефолту: https://github.com/MakiseKurisu/MasmAssembly
RayTwitty
Пока нашел один недостаток - нету возможности показать файл в проводнике. В notepad++ в контекстном меню файла-вкладки было "Открыть директорию файла".
RedMagic
Цитата(RayTwitty @ 06.10.2016, 00:35) *
Пока нашел один недостаток - нету возможности показать файл в проводнике. В notepad++ в контекстном меню файла-вкладки было "Открыть директорию файла".

ПКМ по текстовому полю, а не вкладки:
1001v
Попробуйте visual studio code, очень быстро запускается и есть плагины для всего.
RayTwitty
Цитата(STALKER2011x @ 06.10.2016, 08:30) *
ПКМ по текстовому полю, а не вкладки:

Да, спасибо, не заметил smile.gif

Цитата(1001v @ 06.10.2016, 12:26) *
Попробуйте visual studio code, очень быстро запускается и есть плагины для всего.

На рабочем компе как-нибудь попробую.
Молния в вакууме
Оказывается в C++ можно сделать оператор with(как в JavaScript или Pascal).

Код
#define with(type, var, code)    \
struct __with_##type : type {    \
void operator () () { code }     \
}; static_cast<__with_##type&>(var)()

...

struct S
{
    char *string;
    int x, y, z;
};

S s;

with(S, s,

    x = 2;
    y = 222;
    z = 90;

    string = NULL;
);
1001v
Цитата(saas @ 06.10.2016, 16:41) *
как в JavaScript

В джс это уже убрали.
Молния в вакууме
1001v, ничего не убрали, просто не рекомендуют использовать.
RayTwitty
Код
obj = {
    a = 1,
    b = "str"
}

Не совсем понятна целесообразность применения
Код
with (obj) {
    a = 2
    b = ""
}

если можно написать просто
Код
obj.a = 2
obj.b = ""

так еще и нагляднее.
1001v
Цитата(saas @ 06.10.2016, 17:04) *
1001v, ничего не убрали, просто не рекомендуют использовать.

C use strict работать не будет.
autistic
Цитата(saas @ 10.09.2016, 05:32) *
а каким образом это всё собирается/запускается под Android?

Для этого нужно:
- Установить Android NDK и Android SDK.
- В папке platforms/android лежит шелл скрипт, в нем прописывается путь к скрипту сборки который находится в папке с NDK.
- После запуска скрипта будет выполнена сборка и в результате получится статическая библиотека, которая подключается к демонстрационному приложению.

Демо приложение делается на базе примера, который поставляется в комплекте с Android NDK.
Пример на базе которого я делал демо называется native_app_glue.

Цитата(saas @ 06.10.2016, 18:41) *
Оказывается в C++ можно сделать оператор with(как в JavaScript или Pascal).

в С++14 такую возможность добавили в язык, на манер С99
http://ideone.com/C088ka

На такую конструкцию налагается ограничение - поля структуры в списке инициализации должны быть перечислены строго в том же порядке в каком они были объявлены, иначе компилятор выдаст ошибку.
RayTwitty
Как может называться штука, которая динамически меняет громкость звука (например звук винтов вертолета - плавное нарастание и угасание)? Написать-написал, а человеческое название этому придумать пока не могу biggrin.gif
7.9
Volume control.
7.9
Цитата(RayTwitty @ 11.10.2016, 00:12) *
Написать-написал...

А как сделал? В движке или отдельно, через winapi..? "Плеер" или просто команды?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.