Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину.
Support Gameru!
22 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Курилка программистов, Флуд на около программерские темы
Молния в вакууме
сообщение 28.08.2016, 23:32
Сообщение #1


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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++.

Сообщение отредактировал refuse - 29.08.2016, 00:15
Перейти в начало страницы
 
autistic
сообщение 28.08.2016, 23:51
Сообщение #2


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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

Сообщение отредактировал refuse - 29.08.2016, 00:15


--------------------
nop
Перейти в начало страницы
 
1001v
сообщение 29.08.2016, 02:10
Сообщение #3


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Че пацаны, программисты?


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 29.08.2016, 02:29
Сообщение #4


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Тема кстати с таким же названием уже была.


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 29.08.2016, 03:01
Сообщение #5


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 29.08.2016, 02:27) *
Тема кстати с таким же названием уже была.

то было Писькомерство кулкодеров


--------------------
Перейти в начало страницы
 
Cossack-HD
сообщение 29.08.2016, 07:55
Сообщение #6


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Хочу запилить 2D движок с API OpenGL. Думал пилить на C# ибо знаком с ним, нашёл всё необходимое для привинчивания OpenGL (есть несколько альтернатив), но OpenGL работает нативно только с C++. Насколько сложнее работать с C++, чем C#?
Объекты будут такие: ГГ, 2D платформы с текстурами и вершинами для просчёта коллизий, всякие там партикловые projectlies. Окружающую среду хочу стримить вторым потоком по мере продвижения, из раздельных секторов карты. Нужен файлоый I/O и внутренний редактор уровней с GUI. Где это проще реализовать?

Сообщение отредактировал Cossack-HD - 29.08.2016, 07:55


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
autistic
сообщение 29.08.2016, 08:38
Сообщение #7


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Cossack-HD, можно написать низкоуровневые ф-ии отрисовки графики на Си, а всё остальное, включая загрузку ресурсов, обработку пользовательского ввода, логику взаимодействия с игровыми объектами и т.д. реализовать на C#. Для этого используют P/Invoke (Platform Invocation Services), это такой механизм, который позволяет вызывать неуправляемый код из управляемого. У этого подхода есть и минусы - нельзя передавать данные из управляемого кода в неуправляемый привычным способом, для этого придется использовать Маршалинг, что потребует дополнительных усилий, но учитывая, что для 2D графики много ф-ий рендерера не понадобится, то связанными с маршалингом хлопотами можно пренебречь.

Сообщение отредактировал refuse - 29.08.2016, 08:39


--------------------
nop
Перейти в начало страницы
 
Cossack-HD
сообщение 29.08.2016, 11:11
Сообщение #8


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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

Сообщение отредактировал Cossack-HD - 29.08.2016, 11:11


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
Neo][
сообщение 29.08.2016, 11:30
Сообщение #9


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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



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


--------------------
Перейти в начало страницы
 
Cossack-HD
сообщение 29.08.2016, 11:43
Сообщение #10


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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 на угол столкновения относительно центра/поверхности окружности?

Сообщение отредактировал Cossack-HD - 29.08.2016, 11:44


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
autistic
сообщение 29.08.2016, 12:06
Сообщение #11


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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


--------------------
nop
Перейти в начало страницы
 
Neo][
сообщение 29.08.2016, 12:07
Сообщение #12


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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
сообщение 29.08.2016, 13:13
Сообщение #13


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


refuse, если запилить такую прослойку, то можно пользоваться нативным байндингом C++/OpenGL, а основная разработка может быть на C#? Удобно.

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


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
Neo][
сообщение 29.08.2016, 13:31
Сообщение #14


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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


--------------------
Перейти в начало страницы
 
Cossack-HD
сообщение 29.08.2016, 13:43
Сообщение #15


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Neo][ @ 29.08.2016, 15:29) *

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

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

На канве без текстур и без шейдеров, можно просто сделать однопоточный гейм-дизайн прототип. На OpenGL да, инициализация рендера, стирание буфера вывода, установка view port, установка вершин и групп, назначение текстур, отрисовка по z-буферу (или как там) и прочее прочее. Годный туториал уже нашёл - он настолько для чайников, что начинается с Hello World в Windows Forms Application ;)
Что я имел ввиду - игра вполне может работать в одном потоке и с GL рендером, а разбить на потоки можно те вещи, которые между собой связаны минимально. Глубокая оптимизация в планах не стоит.

Сообщение отредактировал Cossack-HD - 29.08.2016, 13:45


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
Молния в вакууме
сообщение 29.08.2016, 14:06
Сообщение #16


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


На мой взгляд испоьзовать OpenGL для 2D графики это overkill. Если только для кросспатформенности.
Под виндой есть аж три специальных API для 2D графики. Это GDI, DirectDraw и Direct2D. Но использовать их имеет смысл только если не устраивает в плане производительности этот ваш canvas. smile.gif

Сообщение отредактировал saas - 29.08.2016, 14:07
Перейти в начало страницы
 
abramcumner
сообщение 29.08.2016, 14:11
Сообщение #17


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 28.08.2016, 23:30) *
Старые будут ругаться на повторное объяление i. Там надо делать так:

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

И вот уже ругани на повторные объявления нет biggrin.gif
Перейти в начало страницы
 
Neo][
сообщение 29.08.2016, 14:14
Сообщение #18


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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
сообщение 29.08.2016, 18:07
Сообщение #19


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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 объекты для фона (горизонтальная поверхность с перспективой) - это очень актуально для открытых пространств, когда хочется показать глубину мира: тыц. В противном случае, придётся насаживать десятки линий кустиков "друг за другом" - тогда можно даже не думать об уходящей вдаль водной поверхности.

Сообщение отредактировал Cossack-HD - 29.08.2016, 18:11


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.09.2016, 01:05
Сообщение #20


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 29.08.2016, 00:30) *
Однажды я скомпилировал ваш движок на C борландовским компилятором

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

Только архив с Припятью побился, с родным рендером вообще не запускается. (С другой картой всё ОК)
Перейти в начало страницы
 
autistic
сообщение 04.09.2016, 14:20
Сообщение #21


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 04.09.2016, 03:03) *
архив с Припятью побился

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

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

2. В рендерере существовала ошибка при вычислении размеров данных текстуры, в результате некоторые текстуры с мипмапами могли глючить при приближении/удалении камеры, позднее эта ошибка была исправлена этим коммитом но протестировать его не удалось т.к. ресурсы для тестовой сборки к тому моменту были удалены с жесткого диска.


--------------------
nop
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.09.2016, 19:27
Сообщение #22


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

В версии из репозитория некоторые форматы текстур(DXT) вообще не работают, это из за того что коды форматов в types.h не совпадают c теми что используются в PVR файлах.

Сообщение отредактировал saas - 04.09.2016, 19:28
Перейти в начало страницы
 
Asterix
сообщение 04.09.2016, 19:32
Сообщение #23


Продвинутый геймер
********

Репутация:   90  
Группа: Участник
Сообщений: 395
Награды: 3
Регистрация: 07.04.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


saas, 4 апдейт для билдера накатывал?


--------------------
no more running
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.09.2016, 19:48
Сообщение #24


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Ray, нет, у меня есть только первый. laugh.gif
Перейти в начало страницы
 
autistic
сообщение 04.09.2016, 20:13
Сообщение #25


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


saas, чтот я стал забывать как устроен текстурный менеджер, в ближайшее время постараюсь разобраться что там за проблема с форматом пиксела, о результатах отпишусь.


--------------------
nop
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.09.2016, 20:26
Сообщение #26


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


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;
        }
Перейти в начало страницы
 
Молния в вакууме
сообщение 10.09.2016, 03:34
Сообщение #27


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Извинияюсь за даблпост. biggrin.gif

refuse, а каким образом это всё собирается/запускается под Android? Я с этой платформой совсем не знаком..
Перейти в начало страницы
 
RayTwitty
сообщение 19.09.2016, 21:39
Сообщение #28


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

Код
[section]
; comment
key = value


З.Ы. с небольшой натяжкой подходит синтаксис от ассемблера.


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 19.09.2016, 22:03
Сообщение #29


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


А чем не подходит MS-INI?
Перейти в начало страницы
 
RayTwitty
сообщение 19.09.2016, 22:43
Сообщение #30


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 19.09.2016, 22:01) *
А чем не подходит MS-INI?

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

ну и хотелось бы различную подсветку для значений числа, строки... Попробую изменить этот стиль.


--------------------
Перейти в начало страницы
 
RedMagic
сообщение 20.09.2016, 08:42
Сообщение #31


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, советую еще Sublime Text попробовать, там это тоже просто настраивается. А если много RAM и хороший CPU, то можно и хипстерский Atom попробовать. Т.к. по сути это обычный хромиум, то там тоже можно все настроить быстро и красиво.


--------------------
Перейти в начало страницы
 
NEXOR
сообщение 20.09.2016, 08:49
Сообщение #32


Почти Мастер
***********

Репутация:   237  
Группа: Участник
Сообщений: 1163
Награды: 4
Регистрация: 18.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(STALKER2011x @ 20.09.2016, 08:40) *
хипстерский Atom


Не знаю почему все его так хвалят, я попробовал и он очень мне не понравился + там странная вертикальная белая полоска почти по средине экрана с кодом. Крч вернулся на саблайм)


--------------------


SMNS Games Все для GTA 5
--------------------------------
Перейти в начало страницы
 
NatteFrost
сообщение 20.09.2016, 09:07
Сообщение #33


Ветеран
*****

Репутация:   108  
Группа: Участник
Сообщений: 83
Награды: 3
Регистрация: 13.02.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Несколько лет назад я вел свои эксперименты с рендером объектов сталкера под разные движки (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
сообщение 04.10.2016, 19:09
Сообщение #34


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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 - 04.10.2016, 19:17


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 04.10.2016, 20:20
Сообщение #35


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Подход к настройкам радует - слева дефолтные значения с описанием, справа пользовательские. Причем дефолт в режиме 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,
}


Сообщение отредактировал RayTwitty - 04.10.2016, 20:41


--------------------
Перейти в начало страницы
 
RedMagic
сообщение 04.10.2016, 20:32
Сообщение #36


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Еще один огромный плюс Sublime Text, он выполняет самую важную задачу которую только может сделать текстовый редактор - сохранение результатов работы. У меня несколько раз во время работы в Sublime Text выключался ПК (перебои с напряжением), и только он смог полностью сохранить все изменения. Такое не могут ни Notepad+, ни даже VS и Android Studio, они тупо делают авто сохранение раз в X минут. И в случае чего - велика вероятность повреждения данных, из-за чего приходится заново все восстанавливать. Хоть потеря пары минут работы несущественна, но все равно неприятно.


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 04.10.2016, 21:04
Сообщение #37


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


STALKER2011x, сподвигло поставить ещё и то, что в notepad++ после одного из последних апдейтов начались какие-то проблемы с кодировкой. Точнее, я склоняюсь к тому, что проблема была в старой версии (2007 года, которую я когда-то скачал и не обновлял с тех пор). Видимо в последней версии (спустя почти 10 лет) изменились правила пересохранения файлов и установки дефолтных кодировок.
В sublime с этим как-то прозрачнее, ибо все достаточно грамотно настроено и прокомментировано разрабами, плюс можно задать свою кодировку для неопознанных файлов.

З.Ы. вот кстати стиль для MASM, которого тоже нет по дефолту: https://github.com/MakiseKurisu/MasmAssembly

Сообщение отредактировал RayTwitty - 04.10.2016, 21:49


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 06.10.2016, 00:37
Сообщение #38


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Пока нашел один недостаток - нету возможности показать файл в проводнике. В notepad++ в контекстном меню файла-вкладки было "Открыть директорию файла".


--------------------
Перейти в начало страницы
 
RedMagic
сообщение 06.10.2016, 08:32
Сообщение #39


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 06.10.2016, 00:35) *
Пока нашел один недостаток - нету возможности показать файл в проводнике. В notepad++ в контекстном меню файла-вкладки было "Открыть директорию файла".

ПКМ по текстовому полю, а не вкладки:


--------------------
Перейти в начало страницы
 
1001v
сообщение 06.10.2016, 12:28
Сообщение #40


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Попробуйте visual studio code, очень быстро запускается и есть плагины для всего.


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 06.10.2016, 16:40
Сообщение #41


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(STALKER2011x @ 06.10.2016, 08:30) *
ПКМ по текстовому полю, а не вкладки:

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

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

На рабочем компе как-нибудь попробую.


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 06.10.2016, 16:43
Сообщение #42


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Оказывается в 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;
);


Сообщение отредактировал saas - 06.10.2016, 16:43
Перейти в начало страницы
 
1001v
сообщение 06.10.2016, 16:52
Сообщение #43


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 06.10.2016, 16:41) *
как в JavaScript

В джс это уже убрали.


--------------------

Перейти в начало страницы
 
Молния в вакууме
сообщение 06.10.2016, 17:06
Сообщение #44


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


1001v, ничего не убрали, просто не рекомендуют использовать.
Перейти в начало страницы
 
RayTwitty
сообщение 06.10.2016, 17:22
Сообщение #45


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Код
obj = {
    a = 1,
    b = "str"
}

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

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

так еще и нагляднее.

Сообщение отредактировал RayTwitty - 06.10.2016, 17:24


--------------------
Перейти в начало страницы
 
1001v
сообщение 06.10.2016, 18:08
Сообщение #46


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

C use strict работать не будет.


--------------------

Перейти в начало страницы
 
autistic
сообщение 07.10.2016, 00:34
Сообщение #47


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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

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

Сообщение отредактировал refuse - 07.10.2016, 00:38


--------------------
nop
Перейти в начало страницы
 
RayTwitty
сообщение 11.10.2016, 00:14
Сообщение #48


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Как может называться штука, которая динамически меняет громкость звука (например звук винтов вертолета - плавное нарастание и угасание)? Написать-написал, а человеческое название этому придумать пока не могу biggrin.gif


--------------------
Перейти в начало страницы
 
7.9
сообщение 11.10.2016, 00:18
Сообщение #49


Продвинутый геймер
********

Репутация:   33  
Группа: Участник
Сообщений: 339
Награды: 4
Регистрация: 11.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Volume control.


--------------------
Всё легко, но все хлюпики.
Перейти в начало страницы
 
7.9
сообщение 11.10.2016, 01:22
Сообщение #50


Продвинутый геймер
********

Репутация:   33  
Группа: Участник
Сообщений: 339
Награды: 4
Регистрация: 11.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 11.10.2016, 00:12) *
Написать-написал...

А как сделал? В движке или отдельно, через winapi..? "Плеер" или просто команды?

Сообщение отредактировал 7.9 - 11.10.2016, 01:23


--------------------
Всё легко, но все хлюпики.
Перейти в начало страницы
 
RayTwitty
сообщение 11.10.2016, 01:37
Сообщение #51


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


7.9, там речь шла о внутренних звуковых объектах.


--------------------
Перейти в начало страницы
 
7.9
сообщение 11.10.2016, 01:48
Сообщение #52


Продвинутый геймер
********

Репутация:   33  
Группа: Участник
Сообщений: 339
Награды: 4
Регистрация: 11.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Понятненько...
Про (амбиентные) loop-ы, надеюсь, не забыли... там такое как раз и надо.

Сообщение отредактировал 7.9 - 11.10.2016, 02:01


--------------------
Всё легко, но все хлюпики.
Перейти в начало страницы
 
RedMagic
сообщение 11.10.2016, 08:09
Сообщение #53


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 11.10.2016, 00:12) *
называться штука, которая динамически меняет громкость звука

Loudness equalization


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 11.10.2016, 15:36
Сообщение #54


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(7.9 @ 11.10.2016, 01:46) *
там такое как раз и надо.

В амбиентах это, в принципе, не нужно - звуки как правило играют целиком и в них уже есть плавное затухание.


--------------------
Перейти в начало страницы
 
7.9
сообщение 11.10.2016, 23:16
Сообщение #55


Продвинутый геймер
********

Репутация:   33  
Группа: Участник
Сообщений: 339
Награды: 4
Регистрация: 11.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 11.10.2016, 15:34) *
Цитата(7.9 @ 11.10.2016, 01:46) *
там такое как раз и надо.

В амбиентах это, в принципе, не нужно - звуки как правило играют целиком и в них уже есть плавное затухание.

Это -- статичный "амбиент". Я имел в виду "динамический" -- зависимый от ситуации... -- это тоже, что и обычные звуки, только без акустических пресетов.

Сообщение отредактировал 7.9 - 11.10.2016, 23:18


--------------------
Всё легко, но все хлюпики.
Перейти в начало страницы
 
RayTwitty
сообщение 11.10.2016, 23:59
Сообщение #56


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(7.9 @ 11.10.2016, 23:14) *
Я имел в виду "динамический" -- зависимый от ситуации

Динамическая музыка при перестрелках в ЧН/ЗП?


--------------------
Перейти в начало страницы
 
7.9
сообщение 12.10.2016, 00:18
Сообщение #57


Продвинутый геймер
********

Репутация:   33  
Группа: Участник
Сообщений: 339
Награды: 4
Регистрация: 11.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Возможно, но это самое примитивное применение...
В частности, постановщик может это использовать для разного рода невербальных акцентов, например... ну и "не только" smile.gif

Сообщение отредактировал 7.9 - 12.10.2016, 00:23


--------------------
Всё легко, но все хлюпики.
Перейти в начало страницы
 
RedMagic
сообщение 12.10.2016, 08:47
Сообщение #58


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 11.10.2016, 23:57) *
Цитата(7.9 @ 11.10.2016, 23:14) *
Я имел в виду "динамический" -- зависимый от ситуации

Динамическая музыка при перестрелках в ЧН/ЗП?

А разве там звук не плавно менялся в начале и в конце? В том же ЧН - музыка состояла из нескольких кусочков, которые зацикливались, если перестрелка не прекращалась, а звук плавно менялся в начале/конце фрагмента. В ЗП уже просто обычные треки, но звук менялся так же. Насколько я помню.


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 21.10.2016, 21:11
Сообщение #59


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Код
for /f "delims=" %%a in ('dir /b /s /a-d "*"') do echo %%~na >> "_list.txt"

Выводит список файлов (без расширения) текущего каталога и всех подкаталогов в заданный файл.

Как сделать, чтобы пропускались (исключались) все файлы, которые имеют расширение, например ".exe"?


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 21.10.2016, 21:35
Сообщение #60


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, if /I not %%~xa==.EXE
Перейти в начало страницы
 
RayTwitty
сообщение 25.10.2016, 22:23
Сообщение #61


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


С ужасом обнаружил, что в JS нету функции формата строки аля С++ ohmy.gif

В Lua есть:
Код
str = "world"
print(string.format("hello %s", str))
--> hello world


Нашел некий аналог для JS:
https://www.npmjs.com/package/string-format

Но тут строка форматируется в несколько ином виде:
Код
var str = "world";
console.log(format("hello {0}", str))
--> hello world


Существует ли первый вариант для JS?


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 25.10.2016, 22:46
Сообщение #62


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, а зачем она там, когда можно "hello " + "world"?
Перейти в начало страницы
 
RayTwitty
сообщение 25.10.2016, 22:52
Сообщение #63


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Нашел.
http://pastie.org/811028

Цитата(saas @ 25.10.2016, 22:44) *
а зачем она там, когда можно "hello " + "world"?

Это для примера.


--------------------
Перейти в начало страницы
 
1001v
сообщение 26.10.2016, 11:50
Сообщение #64


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 25.10.2016, 22:21) *
Существует ли первый вариант для JS?

В es2015 можно сделать вот так:
Код
let str = "world";
console.log(`hello ${str}`); // => hello world

Обрати внимание на обратные кавычки `, будет работать только с ними.


--------------------

Перейти в начало страницы
 
Cossack-HD
сообщение 26.10.2016, 13:47
Сообщение #65


TECHNOSLAV 80 уровня
**********************

Репутация:   379  
Группа: Участник
Сообщений: 5758
Награды: 6
Регистрация: 26.01.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вопрос по C# MVC

Есть база данных с тремя таблицами. Запилена модель WebsiteDBEntities.
Суть такова: не получается скинуть List с таблицами в View

Код
    public class HomeController : Controller
    {
        WebsiteDBEntities WebsiteDB;
        List<List<object>> listCeption;

        public HomeController()
        {
            WebsiteDB = new WebsiteDBEntities();
        
            listCeption = new List<List<object>>();
            listCeption.Add(new ((object)WebsiteDBEntities().organizations.ToList()));
            listCeption.Add(new ((object)WebsiteDBEntities().persons.ToList()));
            listCeption.Add(new ((object)WebsiteDBEntities().connections.ToList()));
        }

        public ActionResult Index()
        {
            return View(new WebsiteDBEntities().organizations.ToList());
        }
}

КО кричит, что List для object не может принимать organization, person, connection. Кастинг не проходит.
Какие есть варианты запихнуть три модели в один List?

Сообщение отредактировал Cossack-HD - 26.10.2016, 13:51


--------------------
Ryzen 3700X
Arctic Freezer 33 eSports Duo
16GB DDR4 3600MHz
Strix GTX 1080 TI
Перейти в начало страницы
 
abramcumner
сообщение 26.10.2016, 14:04
Сообщение #66


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Cossack-HD @ 26.10.2016, 13:45) *
listCeption.Add(new ((object)WebsiteDBEntities().organizations.ToList()));

Здесь написана какая-то ересь - после new разве не должен тип указываться?

Тогда уж списки как-то так передавать надо:
Код
var orgView = new List<object>();
foreach(var org in WebsiteDBEntities().organizations)
  orgView.Add(org);
listCeption.Add(orgView);


А вообще это какой-то крайне порочный путь.
Перейти в начало страницы
 
RedMagic
сообщение 26.10.2016, 14:05
Сообщение #67


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Хм. Объединить три модели в одну? У каждой же модели поля разные, как listView поймет какие поля куда пихать?
Ну и еще, список перед добавлением в listView приводится к типу object, но ведь listView не поймет какие поля есть в object. Для этого нужно передавать именно тип/класс конкретного list.
---
С C#/MVC работал давно, так что могу ошибаться. Все уже позабыл.


--------------------
Перейти в начало страницы
 
jamakasi
сообщение 26.10.2016, 16:31
Сообщение #68


Доктор Игровых Наук
*******************

Репутация:   544  
Группа: Участник
Сообщений: 3657
Награды: 9
Регистрация: 12.07.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Cossack-HD @ 26.10.2016, 13:45) *
listCeption = new List<List<object>>();
            listCeption.Add(new ((object)WebsiteDBEntities().organizations.ToList()));
            listCeption.Add(new ((object)WebsiteDBEntities().persons.ToList()));
            listCeption.Add(new ((object)WebsiteDBEntities().connections.ToList()));

Я как ява программист и не особо знающий шарпея сильно преполагаю что не проканает такое.
Во первых: new List<List<object>>(); Лист в которым Лист в котором объекты??? Косяк.
Во вторых: существует ли реализация метода ToList у organizations, persons и connections? Или же там реализация от родителя?
В третьих: listCeption.Add(new ((object)WebsiteDBEntities().organizations.ToList())); По логике той же явы конкретно такое написание говорит о том что в listCeption пытаются Add(1 ЭЛЕМАНТ А НЕ ЛИСТ) запихнуть кучу. Хотя в савокупности с первым пунктом и если его правильно реализацивоть то такое возможно. Либо же тут(в шарпе) нет метода AddAll который подразумевает всунуть кучу.
В четвертых, опять же незнаю как это в шарпе но в яве для решения подобной задачи и создания таблицы(на самом деле чего угодно) нужно сначала сделать interface или абстрактный класс общий и от него сделать реализации модели(собственно данные из бд в твоем случае) и графического элемента(представление) View. В таком случае если вызывать SomeView.Add(new SomeData()) то табличка\гуи\pojo корректно автоматом разложит все по полочкам. В т.ч. можно реализовать множественный View который отобразит корректно даже разные типы данных или же будет строить дерево таблиц вложенных таблицами с данными(Это исходя из new List<List<object>>()).
В пятых: юзать тип Object крайне нежелательно, опять же отталкиваюсь от явы.

Касательно ответа на вопрос:
Цитата(Cossack-HD @ 26.10.2016, 13:45) *
Какие есть варианты запихнуть три модели в один List?

Не юзай Object!!! Сделай 1 родительский interface(класс если в шарпе нет интерфейсов) и реализуй его в своих organizations, persons и connections. Дальше в листе тип данных будет родительский interface\класс и в него уже пихаешь потомков.
Перейти в начало страницы
 
RayTwitty
сообщение 29.10.2016, 19:37
Сообщение #69


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вопрос следующего характера - имеется самописный парсер конфигов для nodeJS. Для чтения файла используется внутренняя функция readFileSync, которая возвращает массив строк. Строки в файле выглядят как "ключ = значение". Значение может включать в себя специальные символы (вроде '\n' - перенос на следующую строку). После чтения файла функцией readFileSync, почему-то, все эти специальные символы распознаются как обычные, например '\n' как '\' и 'n', соответственно переноса строки не происходит. Кодировка файла конфига UTF-8, кодировка обрабатывающего .js тоже UTF-8.
В итоге был написан костыль, который заменяет в строке два отдельных символа '\' и 'n' на один '\n'.

В чем собственно вопрос - почему так происходит и может быть есть нормальный парсер для node JS (гугление по русскому и английскому сегменту инета результата не дали)?


--------------------
Перейти в начало страницы
 
1001v
сообщение 29.10.2016, 20:36
Сообщение #70


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 29.10.2016, 19:35) *
которая возвращает массив строк

Она возвращает буфер или строку. Из документации:
Цитата
If the encoding option is specified then this function returns a string. Otherwise it returns a buffer.

Поэтому просто прочитай и порежь:
Код
fs.readFileSync('filename', 'utf8').match(/[^\r\n]+/gu)


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 29.10.2016, 21:44
Сообщение #71


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(1001v @ 29.10.2016, 20:34) *
Она возвращает буфер или строку. Из документации:

Да, просто забыл, что сразу в строку перевел и разбил на части через split('\n').
И да, видимо toString делает аналогичное, что и вызов readFileSync с опцией "utf8".

Цитата(1001v @ 29.10.2016, 20:34) *
Поэтому просто прочитай и порежь:

Вроде бы, никаких изменений - \n как не читался, так и не читается.

З.Ы. У меня кстати подсветка синтаксиса в sublime с твоим шаблоном сломалась biggrin.gif

Сообщение отредактировал RayTwitty - 29.10.2016, 21:59


--------------------
Перейти в начало страницы
 
1001v
сообщение 29.10.2016, 22:02
Сообщение #72


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, split оставляет пустую строку последним элементом, по-моему.

Цитата(RayTwitty @ 29.10.2016, 21:42) *
Вроде бы, никаких изменений - \n как не читался, так и не читается.


У меня нормально.

Или я не понимаю, что тебе нужно.


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 29.10.2016, 22:09
Сообщение #73


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(1001v @ 29.10.2016, 22:00) *
Или я не понимаю, что тебе нужно.

Скачай файл и выведи его в консоль.
Должно вывести именно это (массив из двух элементов):
вызов console.log(array[0]):
Код
test1 = One1
Two1

вызов console.log(array[1]):
Код
test2 = One2
Two2


Сообщение отредактировал RayTwitty - 29.10.2016, 22:39


--------------------
Перейти в начало страницы
 
1001v
сообщение 29.10.2016, 22:46
Сообщение #74


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty,
Код
fs.readFileSync('filename', 'utf8').split(/\\n|\n/gu)


Цитата(RayTwitty @ 29.10.2016, 21:42) *
З.Ы. У меня кстати подсветка синтаксиса в sublime с твоим шаблоном сломалась

Это из-за флага u, он появился только в es6.


--------------------

Перейти в начало страницы
 
Молния в вакууме
сообщение 29.10.2016, 22:56
Сообщение #75


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 29.10.2016, 20:35) *
В итоге был написан костыль, который заменяет в строке два отдельных символа '\' и 'n' на один '\n'.

Почему костыль? По идее, функция которая читает данные из файла и не должна сама расшифровывать escape-последовательности.

Ты же вроде знаешь C++, и даже ассемблер, а такие странные вопросы задаёшь.
Перейти в начало страницы
 
RayTwitty
сообщение 29.10.2016, 23:33
Сообщение #76


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 29.10.2016, 22:54) *
По идее, функция которая читает данные из файла и не должна сама расшифровывать escape-последовательности.

На самом деле проблема была в другом - на строки readFileSync разбивает таки нормально, а вот спец. символы записанные явно, представляет как экранированные. Это я понял, когда тестил варианты от 1001v. В моем случае, для значения ключа, достаточно просто сделать replace('\\n', '\n').

Проблема решена. Плюсы в репутацию поставил smile.gif

Сообщение отредактировал RayTwitty - 29.10.2016, 23:35


--------------------
Перейти в начало страницы
 
Shoкer
сообщение 12.11.2016, 02:29
Сообщение #77


Кандидат Игровых Наук
******************

Репутация:   2153  
Группа: Участник
Сообщений: 3488
Награды: 4
Регистрация: 27.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Возник небольшой вопрос по поводу работы Visual Studio и её компилятора, может кто знает ответ. Весь текст копировать не буду, оставлю просто ссылку - https://github.com/OpenXRay/xray-16/issues/148.

Сами файлы можно посмотреть здесь:
https://github.com/OpenXRay/xray-16/blob/de...gine/Effector.h
https://github.com/OpenXRay/xray-16/blob/de...ActorEffector.h
https://github.com/OpenXRay/xray-16/blob/de...torEffector.cpp

Сообщение отредактировал Shoкer - 12.11.2016, 02:29


--------------------
Мне просто нравятся синие буквы под сообщением.
Перейти в начало страницы
 
RedMagic
сообщение 12.11.2016, 09:56
Сообщение #78


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Shoкer, а ты проверил тот класс? Может он действительно недоступен для наследования?
PS: полагаю, очистка и полная пересборка проекта (точнее, нужного подпроекта, в решении) уже была сделана? VS (как и многие IDE) часто грешит этой проблемой.
PSS: Скорее всего, проблема как раз в новой версии VS / компиляторе. Наверняка в новой версии что-то запретили делать так как было раньше и в итоге возникает предупреждение об ошибке. К сожалению, с C++ работал давно, поэтому ничего конкретного сказать не могу. Кроме как в строке ошибки перейти к определению (комбинацию клавиш в VS тоже забыл laugh.gif ) и посмотреть то место.


--------------------
Перейти в начало страницы
 
autistic
сообщение 12.11.2016, 11:45
Сообщение #79


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Shoкer @ 12.11.2016, 04:27) *
Возник небольшой вопрос по поводу работы Visual Studio и её компилятора, может кто знает ответ.

я так понимаю inherited - это какое-то макроопределение препроцессора, полагаю, что этот макрос разворачивается в этой строке:
Код
inherited::inherited::ProcessCam(info)

в что-то типа
Код
CAnimatorCamEffector::CAnimatorCamEffector::ProcessCam(info)


Сообщение отредактировал refuse - 12.11.2016, 11:46


--------------------
nop
Перейти в начало страницы
 
Молния в вакууме
сообщение 12.11.2016, 11:54
Сообщение #80


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


refuse, нет, inherited это родительский класс.

Код
class A
{
    ...
};

class B : public A
{
    typedef A inherited;
    ....
};
Перейти в начало страницы
 
autistic
сообщение 12.11.2016, 12:04
Сообщение #81


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


saas, тогда все должно работать http://rextester.com/BHL91516


--------------------
nop
Перейти в начало страницы
 
abramcumner
сообщение 12.11.2016, 13:50
Сообщение #82


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 12.11.2016, 12:02) *
saas, тогда все должно работать http://rextester.com/BHL91516

У тебя typedef в паблик секции, перенеси его в private(в сталкере class без модификатора)
Типа такого: http://rextester.com/ETMLJ41638
Студия его собирает, а clang и gcc выдают ошибку.
Перейти в начало страницы
 
autistic
сообщение 12.11.2016, 14:16
Сообщение #83


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 12.11.2016, 15:48) *
Студия его собирает, а clang и gcc выдают ошибку.

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


--------------------
nop
Перейти в начало страницы
 
abramcumner
сообщение 12.11.2016, 15:15
Сообщение #84


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 12.11.2016, 14:14) *
да, действительно. однако, даже если компилятор студии проглотил такой код, это не должно привести к описанной выше проблеме в рантайме, очевидно проблема кроется в чем-то другом.

Под Debug на Visual Studio 2015 Update 3 вызывается, как и положено CEffectorCam::ProcessCam. Но баг я все равно вижу. Однозначно в чем-то другом.

Хотя нет, у меня похоже https://github.com/OpenXRay/xray-16/issues/117
Когда идешь по диагонали и перезаряжаешься, что-то мелькает на экране

А еще есть такой: https://github.com/OpenXRay/xray-16/issues/121

Сообщение отредактировал abramcumner - 12.11.2016, 15:18
Перейти в начало страницы
 
Shoкer
сообщение 12.11.2016, 16:27
Сообщение #85


Кандидат Игровых Наук
******************

Репутация:   2153  
Группа: Участник
Сообщений: 3488
Награды: 4
Регистрация: 27.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


У меня только Update 1 стоит. Юзаю релизную сборку.
Вот тут код чуть более похожий на тот, что в движке - http://rextester.com/LVBODH52203
Однако тут он выдаёт корректный результат.

Сейчас полез в игру в эти же самые функции, видоизменил (кастрировал) их так чтобы они примерно соответствовали примеру из rextester.com, собрал ... и в игре всё вызывается как положено. Откатил изменения - снова идёт некорректный вызов.

Подсунул игре такой код:

Код
BOOL CAnimatorCamLerpEffector::ProcessCam(SCamEffectorInfo& info)
{
    Msg("Test1"); // Корректно
    inherited::inherited::ProcessCam(info);
    Msg("Test2");
    if(!inherited::inherited::ProcessCam(info))    return FALSE;  // Некорректно

И в итоге оказалось что первая строка вызывается "правильно" (CEffectorCam), а вот вторая где if уже некорректно (CAnimatorCamEffector) o_O.gif

UPD1: Вот удалось воспроизвести ошибку - http://rextester.com/JBGUB72847
Как же так происходит? ._. Возможно ошибка кроется в том что у меня старый апдейт, к вечеру попробую обновить. (хотя на rextester то наверно самая последняя версия компилятора стоит)

Хотелось-бы хотя бы заставить компилятор валиться при таких ошибках, подобно тому как это происходит в gcc.

UPD2: Похоже вся проблема возникает из-за знака отрицания !, если убрать его из CAnimatorCamLerpEffector то всё опять-же работает корректно. Следует заметить что я не просто так возвращаю int а не bool, потому что сами GSC там используют макросы FALSE (int 0) и TRUE (int 1) вместо булевых значений.

UPD3: Заменил все int на bool - ошибка осталась: http://rextester.com/ONYXUT27881
Получается всё дело в конструкции !inherited::inherited::ProcessCam(), символ ! видимо исключает один inherited из конструкции, но почему?

Сообщение отредактировал Shoкer - 12.11.2016, 16:53


--------------------
Мне просто нравятся синие буквы под сообщением.
Перейти в начало страницы
 
abramcumner
сообщение 12.11.2016, 17:03
Сообщение #86


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Shoкer @ 12.11.2016, 16:25) *
Получается всё дело в конструкции !inherited::inherited::ProcessCam(), символ ! видимо исключает один inherited из конструкции, но почему?

Скорее всего все дело в глюках студии smile.gif Типа этого: https://connect.microsoft.com/VisualStudio/...Details/2000179
или этого: https://connect.microsoft.com/VisualStudio/...Details/2016129

Если интересно, можешь проверить дебажную сборку или в релизе отключить оптимизации.
Перейти в начало страницы
 
Shoкer
сообщение 12.11.2016, 17:36
Сообщение #87


Кандидат Игровых Наук
******************

Репутация:   2153  
Группа: Участник
Сообщений: 3488
Награды: 4
Регистрация: 27.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Собрал только xrGame без оптимизации - ошибка осталась. Попробую ещё на третий апдейт перейти, потом отпишусь о результатах.


--------------------
Мне просто нравятся синие буквы под сообщением.
Перейти в начало страницы
 
RayTwitty
сообщение 12.11.2016, 18:20
Сообщение #88


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

У меня например, были странные баги (ТЧ) пока не поставил SP1 на 10 студию, а именно: при нажатии на кнопку в меню "Загрузить послед. сохран. игру" игра тупо висла, а с новым xrSound вообще не запускалась (вылетала на стадии синхронизации).

Но это мое имхо конечно же. Можно и потанцевать с новыми студиями, тут каждый сам решает.

Сообщение отредактировал RayTwitty - 12.11.2016, 18:37


--------------------
Перейти в начало страницы
 
autistic
сообщение 12.11.2016, 20:10
Сообщение #89


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Shoкer @ 12.11.2016, 18:25) *
Вот удалось воспроизвести ошибку - http://rextester.com/JBGUB72847

да, действительно есть проблема, вот ассемблерный выхлоп проблемной строчки кода:
Код
; 37   :         if (!inherited::inherited::ProcessCam())    return 0;

    mov    ecx, DWORD PTR _this$[ebp]
    call    ?ProcessCam@CAnimatorCamEffector@@UAEHXZ; CAnimatorCamEffector::ProcessCam

из которого следует, что вызывается не тот метод.
решения мне в данной ситуации видится два:
1. плохое решение
2. хорошее решение

объяснить это можно тем, что С++ контекстно-зависимый язык, т.е. некоторые похожие конструкции несут совершенно различную функциональность в разных контекстах, например:
Код
template <int N> void f(int v)
{
    (void *)v;
}

int main()
{
    int s = 123;
    int k = 1234;
    
    f<11>(k);
    s<11>(k);
    
    return 0;
}


и некоторые малоочевидные конструкции могут сбивать компилятор с толку.

Сообщение отредактировал refuse - 12.11.2016, 20:11


--------------------
nop
Перейти в начало страницы
 
Shoкer
сообщение 12.11.2016, 21:53
Сообщение #90


Кандидат Игровых Наук
******************

Репутация:   2153  
Группа: Участник
Сообщений: 3488
Награды: 4
Регистрация: 27.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


> s<11>(k);
Действительно, как этот код вообще собирается o_O.gif, хотя его даже gcc переваривает. (Я правда в шаблоны слабоват)

Но вообще моя проблема в принципе не в том как исправить эту ошибку, а в том как выявить подобные ошибки в остальных файлах проекта, может где то есть настройка чтобы заставить компилятор\студию более строго относится к коду и ослабить его "самодеятельность"? А то есть опасения что это не единственное место в коде Сталкера с таким поведением.

Сообщение отредактировал Shoкer - 12.11.2016, 21:54


--------------------
Мне просто нравятся синие буквы под сообщением.
Перейти в начало страницы
 
autistic
сообщение 12.11.2016, 21:58
Сообщение #91


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Shoкer @ 12.11.2016, 23:51) *
как это код вообще работает

все просто, на самом деле это логическое выражение, расставь пробелы и сразу станет понятно

Цитата(Shoкer @ 12.11.2016, 23:51) *
как выявить подобные ошибки в остальных файлах проекта

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


--------------------
nop
Перейти в начало страницы
 
Молния в вакууме
сообщение 12.11.2016, 22:52
Сообщение #92


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 12.11.2016, 21:08) *
1. плохое решение
2. хорошее решение

Можно ещё скобки добавить.
Код
!(inherited::inherited::ProcessCam(info))
Перейти в начало страницы
 
RayTwitty
сообщение 27.11.2016, 22:24
Сообщение #93


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


NodeJS

Имеется функция случайной перетасовки значений в массиве:
CODE
global.shuffle = function(array) {
let currentIndex = array.length, temporaryValue, randomIndex

// While there remain elements to shuffle...
while (currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex)
currentIndex--

// And swap it with the current element.
temporaryValue = array[currentIndex]
array[currentIndex] = array[randomIndex]
array[randomIndex] = temporaryValue
}

return array
}

попробовал запихнуть ее в прототип объекта Array, чтобы использовать как и другие стандартные функции:
CODE
Array.prototype.shuffle = function() {
let array = this
let currentIndex = array.length, temporaryValue, randomIndex

// While there remain elements to shuffle...
while (currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex)
currentIndex--

// And swap it with the current element.
temporaryValue = array[currentIndex]
array[currentIndex] = array[randomIndex]
array[randomIndex] = temporaryValue
}

return array
}

но получаю какой-то бред в консоль при инициализации модуля, в котором есть использование модуля fs:
Код
fs.js:951
  return binding.readdir(pathModule._makeLong(path), options.encoding);

Аналогично этому, добавлял новые методы в прототип объекта String, все было нормально.

Может быть, кто нибудь знает - что это за дичь?


--------------------
Перейти в начало страницы
 
1001v
сообщение 27.11.2016, 23:04
Сообщение #94


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, запустил твой пример, ошибок нет, нода 7.1.0.


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 27.11.2016, 23:11
Сообщение #95


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(1001v @ 27.11.2016, 23:02) *
запустил твой пример, ошибок нет

Где-нибудь вверху есть
Код
const fs = require('fs')

?

Без подключения этого модуля и у меня работает.

Сообщение отредактировал RayTwitty - 27.11.2016, 23:11


--------------------
Перейти в начало страницы
 
1001v
сообщение 27.11.2016, 23:29
Сообщение #96


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, есть.


--------------------

Перейти в начало страницы
 
NanoBot-AMK
сообщение 28.11.2016, 02:21
Сообщение #97


Почти Мастер
***********

Репутация:   75  
Группа: Участник
Сообщений: 1168
Награды: 4
Регистрация: 10.11.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Придумал тут, дефайны к черту, с пояса гранаты или нет, лучше задавать конфигом, а то в рев181 не берутся в пояс по дефолту(надо настраивать конфиг), и реально делаем секцию inventory_manager и там задаём: используем гранаты и патроны с пояса или нет, я думаю так удобней будет, и для отладки можно сразу проверить два варианта, так лучше и самим мододелам. Сейчас идея на компиляции. rolleyes.gif

ЗЫ
Ещё интересные проблемы были, сделал перегруженный метод explode, где можно задавать вредителя, старый метод оставил для совместимости. Дак проблема была, метод explode(0) работал, а метод explode() отваливался, так как в скрипте менеджер перегруженных методов не знал какой метод выбрать или explode(u32) или explode(CScriptGameObject*), сделал ещё один перегруженный метод explode(void) который выбирает принудительно один из методов. И тут тоже проблемы были.
CODE

// Так не прокатило.
void CScriptGameObject::explode()
{
explode(0);
}
// А так прошло.
void CScriptGameObject::explode()
{
int zero = 0; // для однозначности вызова перегруженной функции void CScriptGameObject::explode(u32)
explode(zero);
}
// Но сделал так.
void CScriptGameObject::explode()
{
explode(nullptr); // для однозначности вызова перегруженной функции void CScriptGameObject::explode(CScriptGameObject *initiator)
}

Вот как то так. cool.gif

Сообщение отредактировал NanoBot-AMK - 28.11.2016, 02:23


--------------------
СТАЛКЕР только для ПК!
Перейти в начало страницы
 
RayTwitty
сообщение 28.11.2016, 17:41
Сообщение #98


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


1001v, пока выяснил, что такая байда при добавлении любой функции в объект массива.
Код
Array.prototype.shuffle = function() {
  return 'test'
}

Подозреваю, что где-то у меня косяк, хотя и очень странный.

Нода 6.9.1.

Сообщение отредактировал RayTwitty - 28.11.2016, 17:41


--------------------
Перейти в начало страницы
 
1001v
сообщение 28.11.2016, 18:18
Сообщение #99


Доктор Игровых Наук
*******************

Репутация:   1084  
Группа: Участник
Сообщений: 3950
Награды: 6
Регистрация: 24.08.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


RayTwitty, сейчас проверил на 6.6.0, все также хорошо. У тебя это происходит в контексте какого-то проекта, или в отдельно взятом модуле тоже так?


--------------------

Перейти в начало страницы
 
RayTwitty
сообщение 17.12.2016, 16:40
Сообщение #100


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


https://developer.mozilla.org/ru/docs/Web/J...s/Object/assign
Код
Object.assign(target, ...sources)

По идее, этот метод должен копировать данные (ключи и значения) из одного объекта в другой. Но у меня почему-то копируются ссылки. Т.е. при изменении target, изменения вносятся и в sources.

upd:
Код
let obj1 = {}
let obj2 = {field1: [5, 25, 100], field2: 'text'}

Object.assign(obj1, obj2) // копирование obj2 в obj1
obj1.field1.splice(0, 1) // удаление первого элемента массива в obj1

console.log(JSON.stringify(obj2)) // => массив в obj2 тоже изменился!

Видимо, это не глубокое копирование. Подобъекты нужно копировать вручную (в том числе и массивы, поскольку в JS, массив интерпретируется тоже как объект), например так:
Код
function deepCopy(obj) {
    if (typeof obj != "object")
        return obj
    
    var copy = obj.constructor()
    for (var key in obj) {
        if (typeof obj[key] == "object")
            copy[key] = deepCopy(obj[key])
        else
            copy[key] = obj[key]
    }
    
    return copy
}


Сообщение отредактировал RayTwitty - 17.12.2016, 17:10


--------------------
Перейти в начало страницы
 

22 страниц V   1 2 3 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 11.03.2026, 21:46