Результаты поиска
| |
Archido | Дата: Вторник, 25 Сентября 2012, 14:38 | Сообщение # 441 | Тема: Перемещение в онлайн игре |
Сэнсэй
Сейчас нет на сайте
| Начать можно с этого
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Вторник, 25 Сентября 2012, 07:34 | Сообщение # 442 | Тема: Вопрос-Ответ (C++) |
Сэнсэй
Сейчас нет на сайте
| Quote (SWFcreator) Проверил, я в шоке: long - 8, int - 4(!!!), short - 2. У Линуксов (и Mac OS X) размер Long'a зависит от разрядности ОС (32 / 64), int - всегда 4 байта, short 2. В винде long как и int - всегда 4 (даже при 64 ОС).
Конкретно про выделение куска памяти в винде Нохчи правду написал - все сишные ф-ции выделения памяти дергают Win API, в Линуксах API как-бы то и нет , и malloc (new использует его) там некоторое нагромождение кода, который всем и занимается. Но в любом случае, около выделенных блоков должна храниться (и хранится) некая служебная информация по которой можно точно идентифицировать необходимый блок (в списке, табличке, etc), например (в простом случае) хранить перед блоком его Id или указатель. Зная его Id, можно сделать выборку из спец. таблички, получить некую структуру данных для данного блока, которая содержит например начало, размер, сылки на соседние блоки, etc и после чего его можно правильно удалить - этим занимается менеджер памяти, в каждой ОС он отличается и деталей реализации никто не знает(в Линуксах правда можно в ядро заглянуть )
В #669 я писал конкретно про операторы new[] и delete[], которые кроме простого выделения памяти занимаются еще и вызовом конструкторов \ деструкторов у пачки объектов. Оператор delete[] имеет всего один параметр - указатель на область памяти, но при этом он должен знать у скольких объектов вызывать деструкторы, делается это обычно когда деструкторы нетривиальные (свои собственные, не по умолчанию). Тогда оператор new[] резервирует на 4 байта больше памяти и кладет кол-во выделенных элементов в самом начале блока (т.е. new возвращает указатель на, скажем, массив - pArray, а кол-во элементов будет лежать в pArray - 1), основываясь на которых delete[] правильно вызовет деструкторы. Реализация полностью зависит от компилятора, он может как хранить эти 4 байта, так и нет (когда не объявлены деструкторы), разные компиляторы могут хранить это по-разному.
Например, MSVC, при таком коде хранит количество элементов, как я описал выше: Code struct DataType { int A;
~DataType() { A = 0; } }; DataType* pArray = new DataType[20];
int Size = *((int*)pArray - 1); // тут будет 20 std::cout << "Count: " << Size << std::endl;
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 25 Сентября 2012, 07:40 |
|
| |
Archido | Дата: Понедельник, 24 Сентября 2012, 19:21 | Сообщение # 443 | Тема: Вопрос-Ответ (C++) |
Сэнсэй
Сейчас нет на сайте
| Где хранить - отдано на откуп тем кто реализовывает данные операторы (писатели компиляторов), насколько я знаю стандартом это не регламентировано. Поэтому может быть как угодно, но хранят обычно прямо перед выделенным блоком 4 байта (Pblock - 4 bytes), там и записано кол-во элементов.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Понедельник, 24 Сентября 2012, 19:22 |
|
| |
Archido | Дата: Понедельник, 24 Сентября 2012, 15:27 | Сообщение # 444 | Тема: Обновление точек в OpenGL |
Сэнсэй
Сейчас нет на сайте
| Quote (clidi) По моему ты не на то умножаешь. А по-моему у тебя большое недопонимание основ. Во-первых, код который привел я полностью идентичен тому, что написал ты (скопипастил наверное) - и я еще не на то умножаю Во-вторых, как точка в (0,0) может как-либо поворачиваться? В своем же коде ты умножаешь ноли на элементы матрицы, которые отвечают за поворот... что по-твоему там в результате должно получиться?
В твоем случае точка (0,0) есть центр координат твоего квадрата(например), вокруг нее все и вращается. У квадрата есть еще 3 точки, вот их и умножай.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Понедельник, 24 Сентября 2012, 13:31 | Сообщение # 445 | Тема: Обновление точек в OpenGL |
Сэнсэй
Сейчас нет на сайте
| Quote (clidi) Что с этим делать чтоб понять куда развернулась вершина? А умножить изначальную вершину на полученную матрицу не судьба что ли?
Code float m[4][4];
... glGetFloatv(GL_MODELVIEW_MATRIX, m); ...
Pos.x = m[0][0] * Vertex.x + m[1][0] * Vertex.y + m[3][0]; Pos.y = m[0][1] * Vertex.x + m[1][1] * Vertex.y + m[3][1];
Pos - результат, Vertex - изначальная позиция вершины (то, что идет в параметрах glVertex2d, первый x, второй y соответственно).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Понедельник, 24 Сентября 2012, 13:32 |
|
| |
Archido | Дата: Понедельник, 24 Сентября 2012, 13:15 | Сообщение # 446 | Тема: Реализация плавного прыжка |
Сэнсэй
Сейчас нет на сайте
| Так ты бы сделал нормальную физику, помню был вопрос о "траектории полета ядра". Можно сказать, что тут тоже самое + проверка коллизий, и усе.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 18:40 | Сообщение # 447 | Тема: Разработчики приложений. Дискуссия на тему новой индустрии. |
Сэнсэй
Сейчас нет на сайте
| Quote (DreamCraft) Я где-то говорил что Юнити в чем-то уступает\хуже? Окей, тогда зачем использовать что-то другое, если есть Unity?
Quote (DreamCraft) Если инструмент работает, на нем создаются продукты, которые зарабатывает деньги С такой постановкой вопроса - деньги можно зарабатывать не пользуясь вообще никаким инструментом, под голую ось и делать деньги, ога. Так что это ни о чем не говорит, совсем (Откуда мне знать, может ты из принципа берешь чего похуже и доказываешь, что ОНО ТОГО СТОИТ). Вопрос в удобности и функциальности (стабильности, поддержке, etc) данного инструмента, результат которых скажется на качестве и скорости разработки. Мысль была одна и она же есть: Зачем брать что-то непонятное, если есть лучше, удобнее, быстрее, функциональнее? (Специально для тебя напишу - как минимум не хуже).
Сейчас и я напишу для танкинстов. Грязью никто и ничего не поливает. Еще раз, ты сам использовал этот инструмент или в глаза его хоть видел? Сомневаюсь. А я даже тебе объясню почему оно немного "невменяемое".
Есть такой движок XNA, его захотели по все мобильные платформы портануть, ну чо, сказано сделано - вот на свет появилась пара фреймворков ExEn и MonoGame. Оба полностью не портированы и у каждого свой набор багов (можешь погуглить, если хочешь), первый умеет только 2д, второй вроде недавно научился частично 3д (умеет не все, баги пробегают) и в него добавили наконец-то поддержку OpenGL 2.0, частично . Обещают сделать 3-ью, а там уже и 4-ую версию - где все будет путем. А вот когда будет - тогда будет совсем другое дело.
Вот и ответ на твой вопрос: Quote (DreamCraft) Во-первых, что для тебя есть "вменяемое"? Я тебе скажу, что такое невменяемое по-мне: проект в процессе разработки, функционал неполный (есть ограничения, ф-ции в API помеченные комметом //TODO) и различного рода баги. Еще раз зачем все это испольовать, если есть Unity например?
Вообще смотрю, ты много о деньгах и коммерции любишь говорить, так вот, если тебе нравится делать коммерческий проект и заодно быть бетатестером некоего инструмента в придачу, то флаг в руки, но другим такое не стоит советовать
Quote (DreamCraft) Во-вторых, ты даешь советы о том, что смотреть на что-то другое смысла нет Ты любишь много сочинять и вырывать части из контекста, у меня есть и такая фраза: Quote (Archido) Но для ознакомления посмотреть наверное можно
Еще раз, я это писал конректному человеку, а не поучения "для всех". Уверен, он все посмотрит и сделает правильный для него выбор.
Quote (DreamCraft) P.S. В игре "кто скажет слово последний" ты победил. Пиши. Ок, бро.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 21 Сентября 2012, 18:42 |
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 17:30 | Сообщение # 448 | Тема: Разработчики приложений. Дискуссия на тему новой индустрии. |
Сэнсэй
Сейчас нет на сайте
| DreamCraft Конечно не побежишь (потому что больше ничего и нет ), ага. C какой вообще целью чота сюда запостил? "Умом" что ле захотел блеснуть? Ну наверное получилось.
Quote (DreamCraft) Все то, что ты сам же перечислял в своих же предыдущих сообщениях, вполне конкурентоспособно, поскольку на всем было сделано не мало игр. Этот довод тебя не устраивает? Нет, т.к. ты на какой-то свой вопрос ответил . Повторить мой? Окей. Тебе от чего-то не понравилось, что я похвалил Unity и я тебя попросил назвать преимущества всего остального перед последним. В ответ получил какое-то лепетание про "конкурентоспособно" (мнение ИКСПЕРТА) и "турники" , ага. Убойный аргумент. И вообще не надо ничего лишнего выдумывать, я не говорил, что на этом нельзя разрабатывать. При этом я отвечал конкректному человеку, который уже давно собирается начать писать под Unity, поэтому на последнем был сделан особый акцент. Что ты сюда влез, не ясно ни разу.
Quote (DreamCraft) Кривость собственных рук\мозга - не повод называть что-либо "невменяемым" Сказал прогромист... окок. Тебе виднее.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 15:28 | Сообщение # 449 | Тема: Как кто делает? |
Сэнсэй
Сейчас нет на сайте
| Quote (x_Medwed) Тесть все таки луче делать боле цельную модель а то что анимировать отдельно..? Модели оружия просто сами по себе цельную вещь представляют, там смысла нет много отдельно делать, только детали. Все зависит от модели.
Вот мы на днях (точнее моделлер в большей степени ) доделывали электровоз ТЭП80, так вот там только корпус единым мешем, все остальное (мелкие детали на корпусе, колеса и иже с ними, внутренности и их детализация) отдельными объектами - их очень и очень много вышло
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 15:11 | Сообщение # 450 | Тема: Разработчики приложений. Дискуссия на тему новой индустрии. |
Сэнсэй
Сейчас нет на сайте
| Quote (DreamCraft) Очередное Х-пертное мнение. А многие ведь к нему прислушаются... Давай X-перт, поведай ка миру какие есть интересные средства для написания игр под Android и iOS на C#, и в чем заключаются их преимущества перед Unity. Иначе очередной балабол.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 21 Сентября 2012, 15:14 |
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 14:47 | Сообщение # 451 | Тема: Динамический массив (работа с видимой областью уровня) |
Сэнсэй
Сейчас нет на сайте
| Quote (ilgamer) Думаю что не стоит так из за 1 Мб переживать) Само собой
А вот рисовать, действительно, лучше только то что видно на экране (не весь уровень).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 14:43 | Сообщение # 452 | Тема: Динамический массив (работа с видимой областью уровня) |
Сэнсэй
Сейчас нет на сайте
| Ну именно уровни то можно и подгружать при необходимости, да (только смысла нет, ибо малый размер).
А вообще 10000 (имено 10 тыс.) int - это 40 тыс. байт. 40K bytes * 50 levels = 1 Mbyte на 50 уровней.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 21 Сентября 2012, 14:44 |
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 14:26 | Сообщение # 453 | Тема: Динамический массив (работа с видимой областью уровня) |
Сэнсэй
Сейчас нет на сайте
| В любом случае неплохо бы необходимую часть кода показать, а то так не очень понятно. Ну и не должно оно много памяти "жрать"
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 14:15 | Сообщение # 454 | Тема: Как кто делает? |
Сэнсэй
Сейчас нет на сайте
| Кол-во объектов в кадре (из-за которых может падать производительность в движке) и кол-во объектов из которых состоит модель - это совершенно разные вещи. Если эти объекты будут использовать одну и ту же текстуру (или развертку, разные ее части), то с точки зрения движка - это будет единый меш. Никакой разницы не будет.
Обычно, конечно, общую форму делают цельной, а детальки "вешают" поверх нее... Плюсы есть - не нужно резать и портить общую сетку и соответственно это экономит полигоны, другие объекты можно легко использовать повторно. Ну и собсна составная модель "лепится" быстрее, как правило. Тут как бы все индивидуально (и от человека, и от модели зависит), делают все по-разному конечно, но так делать можно. В Unreal такой подход очень любят.
Есть в таком подходе пара нюансов: Во-первых, нужно не допускать сильно близко расположенных относительно друг друга параллельных полигонов, иначе в игре из-за недостаточной точности z-Buffer'a они будут "перекрывать" друг друга и будут артефачить (то один появится, то второй).
Во-вторых, при совмещении разных объектов нужно один из них немножко "топить" в геометрии другого (ну думаю это очевидно), иначе тоже могут быть артефакты. Поэтому если, например, совместить два объекта так, что у них окажется общее ребро - то это плохо (т.к. нет общих вершин на стыке, ребре т.е.) и возможны артефакты.
Как-то так примерно, кто моделировать умеет - лучше меня расскажет (я больше по технической части)
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 07:07 | Сообщение # 455 | Тема: Обновление точек в OpenGL |
Сэнсэй
Сейчас нет на сайте
| Quote (clidi) Как можно обновлять точки в Opengl? Наверное не точки, а вершины.
Quote (clidi) Кто как это делает? Например при передвижении персонажа(квадрата) его 4 вершины меняют координаты. Как узнать где именно они теперь находятся? Самый простой вариант (и сам используемый) - делать через World матрицу, в OpenGL это вообще легко сделать, благодаря наличию в нем Matrix стека.
Как то так: Code //вот эта ф-ция переместит квадрат в нужною позицию glTranslatef(PosX, PosY, 0.0f); //PosX, PosY - позиция квадрата на экране
glBegin(GL_QUADS); //Вот отрисовка персонажа квадрата =), размером 64х64 glVertex3f(0, 0, 0.0f); glVertex3f(64, 0, 0.0f); glVertex3f(64, 64, 0.0f); glVertex3f(0, 64, 0.0f); glEnd();
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 21 Сентября 2012, 06:48 | Сообщение # 456 | Тема: Нужны идеи (программные) для реализации консольной игры |
Сэнсэй
Сейчас нет на сайте
| Quote (Saitei) как можно написать и отобразить двумерный массив, чтобы в консоли отобразилось что-то вроде этого: Ну а собственной головой подумать? Это ж элементарные вещи совсем:
Code const int Width = 16; const int Height = 16;
char Map[Width][Height]; memset(Map, '#', sizeof(Map));
for (int i = 1; i < Width - 1; i++) for (int j = 1; j < Height - 1; j++) Map[i][j] = ' ';
//Render for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { std::cout << Map[i][j]; } std::cout << '\n'; }
std::cout << '\n'; system("pause");
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Вторник, 18 Сентября 2012, 16:18 | Сообщение # 457 | Тема: Анимация в Delphi |
Сэнсэй
Сейчас нет на сайте
| Quote (TimKruz) И DelphiX сильно тормозит даже с небольшим числом спрайтов (штук сто) - наверное, как раз из-за инкапсуляции в компоненты Это потому что он использует древний и медленный DirectDraw, а не Direct3D.
Quote (andarky) Надо DirectDraw учить. Не надо, это совсем уж прошлый век.
Посмотреть можно например на Asphyre - это как раз преемник DelphiX. А также - ZenGL, DGLE, Omega, много их
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Вторник, 18 Сентября 2012, 04:26 | Сообщение # 458 | Тема: Лабораторная по Паскалю |
Сэнсэй
Сейчас нет на сайте
| Quote (Техник) А как можно сделать автоматическое определение где мантисса,а где порядок? Никак нельзя, да и в чем смысл? Обычно вещественных типов всего несколько штук и по каждому можно найти информацию о его представлении в памяти, нафига что-то автоматически определять то?
Ты лучше расскажи, что конкретно в задании требуется, а то такое чувство, что ты сам точно не знаешь что нужно.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 18 Сентября 2012, 06:45 |
|
| |
Archido | Дата: Воскресенье, 16 Сентября 2012, 12:55 | Сообщение # 459 | Тема: Разработчики приложений. Дискуссия на тему новой индустрии. |
Сэнсэй
Сейчас нет на сайте
| Quote (Stalker_Shooter) Кстати, а есть ли варианты (кроме Unity) писать игры под IOS/Android на C Насколько мне известно, вменяемого ничего нет. Есть какие-то недопорты XNA, вроде ExEn или MonoGame. Первый поддерживает только 2д, второй вроде и умеет 3Д, но только лишь отчасти (и как пишут - есть баги). Но для ознакомления посмотреть наверное можно.
В любом случае, с какой стороны ни посмотреть - им до Unity, как до луны пешком. На его стороне и скорость (ибо он сам на С++ написан, да), и удобство (редактор только чего стоит), а также имеет в разы больше возможностей. Смотреть на что-то другое смысла в общем-то нет. Изучай, пригодится
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Воскресенье, 16 Сентября 2012, 11:38 | Сообщение # 460 | Тема: Лабораторная по Паскалю |
Сэнсэй
Сейчас нет на сайте
| Quote (Техник) А как определить в каких байтах лежит мантисса,а в каких порядок? Так гуглить, не? Институт тем и примечателен, что учит быстро и правильно искать необходимую информацию
На самом деле не все так просто. Если нужен именно 6-ти байтовый Real, то необходимо указывать Real48 - это и есть хитрый и устаревший 6-байтовый флоат, у которого совсем не все как у людей. В более ли менее современных делфях тип Real является 8-ми байтным, аля Double. Если нужен Double, то и массив должен состоять из 8-ми элементов соответственно. Если хорошенько загуглить, то можно найти неплохой мануалчег по языку и его типам в том числе:
Вот это современный Real аля Double (8 байт). 1 бит - знак, следующие 11 - порядок, остальное - мантисса. Собсна, вытаскивать нужно в обратном порядке.
А вот он Real48:
Знак на том же месте, но порядок и мантиссу тут поменяли местами. 1 бит - знак, следующие 39 - мантисса, и 8 - под порядок. В этом случае порядок окажется в первом элементе массива E := m[1], в остальных пяти мантисса + знак. Знак можно получить как Sign := (m[6] shr 7);
Вообще интересно, что тебе дальше с этим нужно делать?
Для примера можно сделать как-нибудь так: Code F: Real48; M: array[1..6] of Byte absolute F; Bits: array[0..47] of Byte;
I, J: Integer; begin F := -5.656;
for I := 1 to 6 do for J := 0 to 7 do begin Bits[47 - ((I - 1) * 8 + J)]:= (M[I] shr J) and 1; end; В массиве Bits будет F в двоичной системе в виде, собсна, битов. Их положение и порядок совпадают с тем, что приведено на картинках. Берешь нужные и усе
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Воскресенье, 16 Сентября 2012, 12:14 |
|
| |
|