Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2010, 17:38   #71
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Я сегодня как раз переводил фсе игровые файлы GravityRace из двоичных типизированных файлов в двоичные нетипизированные. Координально ничего не изменилось, но теперь кол-во элементов (например вершин в полигоне или кол-во самих полигонов в объекте) устанавливается динамически, и размер файла зависит от сложности объекта. Вот в таком виде (очередность записи blockwrite'ом) сохраняется физический объект в моей игре (для этого есть редактор):
Код:
{//======Формат данных PHO=========
-----------Полигоны----------------
 количество - integer
      количество вершин - integer
         x n - integer
         y n - integer
      трение - single
      упругость - single
      длинна индитификатора - integer    
        символ n - char
---------Окружности----------------
  количество - integer
         радиус - integer
         x - integer
         y - integer
         трение - single
         упругость - single
         длинна индитификатора - integer
           символ n - char
--------Доп-ная информация---------
 масса - single
 длинна названия изображения - integer
    символ n - char
Вадим Буренков вне форума Ответить с цитированием
Старый 24.02.2010, 05:59   #72
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

А я сделал по-другому. В моей игре есть неизменные объекты, например, ящики, круги. Их параметры всегда одинаковы (кроме положения). Поэтому на выходе из редактора карт получается типизированный файл, куда записывается массив из записей с двумя переменными - p-cpVect(положение) и n-integer (тип объекта). Файл примерно 1 кб (20 тел)
В игре оператором case n of создаются объекты.

Но есть проблема. В такой файл не так просто запихнуть сам мир (ландшафт, terrain). Придётся хранить карту в двух файлах, где 2ой будет нетипизированным, хранящим дополнительные данные.
Начинаю заниматься озвучкой.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 24.02.2010, 18:30   #73
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
на выходе из редактора карт получается типизированный файл, куда записывается массив из записей с двумя переменными - p-cpVect(положение) и n-integer (тип объекта).
Цитата:
В игре оператором case n of создаются объекты.
То есть? Где тогда редактируется форма объекта и его параметры? В игре не будут предусмотрены объекты сложной формы и все их виды будут заложены в exe?
Цитата:
Придётся хранить карту в двух файлах
И пояему нельзя хранить все в одном нетипизированном файле сохраняя двнные первого файла одним blockwrite например в начале записи.
Вадим Буренков вне форума Ответить с цитированием
Старый 25.02.2010, 10:37   #74
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Да, в игре будут одни и те же объекты, но их много. В процессе создания игры можно легко добавлять новые формы, дописывая в case of редактора и игры. С этим проблем не возникает. Мне хватает этого.
А ландшафт я вчера смог уместить в тот же файл, координаты вершин сохраняются в карте, а в игре последовательно соединяются.
С типизированным работать легче, поэтому его и использую.
//////////////////////////////////////////////////////////////////////
К сожалению, шарик, которым управляет игрок, при нажатии на пробел не просто прыгает, а взлетает (я ему скорость по оси ОY добавляю). Я вот не знаю, как определить, есть ли под объектом "пол" (объект, от которого можно оттолкнуться и прыгнуть). Как это узнать??
И еще со звуками: надо в модуль с коллизиями добавлять процедуры воспроизведения?
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 25.02.2010, 16:30   #75
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Я вот не знаю, как определить, есть ли под объектом "пол" (объект, от которого можно оттолкнуться и прыгнуть). Как это узнать??
Цитата:
надо в модуль с коллизиями добавлять процедуры воспроизведения
Запомни основное правило: В КОД ДВИЖКА ПРИ СОЗДАНИИ ИГРЫ НЕ ЛЕЗУТ. Изменять что либо можно если ты модернизируешь сам движок. Весь код игры должен быть в игровых модулях, а данные в этом случае можно получить через вспомогательные переменные-списки движка.
Там в модуле uArbiter есть переменные:
Код:
  cpArbiter: PArbiter;
  ArbitersCount: integer;
Через них можно узнать все тела вступаюшие в контакт, кол-во точек контакта, возникающую упругость и трение итд. Через эти данные можно звуки добавить и узнать стоит ли шарик на земле (но там не все так просто, если делать нормально нужно чтоб шарик именно нижней частью касался земли). Также правильнее не изменять скорость при прыжке, а выполнять импульс для тела (поищи соответствующие команды в движке).

Последний раз редактировалось Вадим Буренков; 25.02.2010 в 16:34.
Вадим Буренков вне форума Ответить с цитированием
Старый 26.02.2010, 14:20   #76
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Что хранится в переменных cpArbiter, cpBody, cpShape и т.д и для чего?
Не могу разобраться в работе Arbiter'а, при его создании надо в параметрах указывать не тела, а формы. А если в теле много форм? В ландшафте их куча.
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 26.02.2010 в 15:57.
Андрей 93 вне форума Ответить с цитированием
Старый 26.02.2010, 22:54   #77
Ущерб
 
Регистрация: 26.02.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Андрей 93 Посмотреть сообщение
Начал делать двухмерную игру (вид сбоку, как в марио и world of goo). Работаю над физикой.
Движется шарик по форме, прыгает, катается, отскакивает от краёв формы. Но вот проблема: как сделать так, чтобы шарик взаимодействовал не только с ровными вертикальными и горизонтальными стенами, но и со сложным рельефом. Например, как в одной из игр (не помню название) - рисуешь мышкой дорожку, по дорожке забираешься наверх.
Ещё хочу уточнить, как описать взаимодействие шара с другими шарами, квадратами и др. Важна сама логика, принципы. Заранее спасибо, мне это важно
Кто-нибудь знает про какую игру тут говориться? Хочется посмотреть на неё.
Ущерб вне форума Ответить с цитированием
Старый 27.02.2010, 12:45   #78
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Игра на начальном этапе. Для ясности
Вложения
Тип файла: rar игра.rar (133.7 Кб, 24 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 27.02.2010, 21:40   #79
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Не могу разобраться в работе Arbiter'а, при его создании надо в параметрах указывать не тела, а формы. А если в теле много форм? В ландшафте их куча.
Арбитер не надо создавать, это буфер в который заносятся все данные о контактах во время обработки физики. Нам надо лишь достать эти данные из памяти и пользоваться. Я приведу пример того как можно узнать точки контакта тел:
Код:
procedure Draw;
var
//это временный указатель на арбитер
arb: PArbiter;
i:integer;
begin
//устанавливаю размер точек для рисования:
Pr2D_PixelSize(10);
//делаем временный указатель первым
arb:=cpArbiter;
//проходим по всем контактам
for i:=0 to ArbitersCount-1 do
begin
//проходим по всем точкам контакта и выводим точку в его месте.
//тут также важно чтобы контакт был активен,
//поскольку в памяти постоянно хранится последняя координата контакта
//(чтобы понять о чем я убери условие активности)
for n:=0 to arb.numContacts do if arb.active then Pr2D_Pixel(arb.contacts[n].p.x,arb.contacts[n].p.y,$FFFFFF);
//смещение указателя на следующий контакт
arb:=arb.Next;
end;

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

Последний раз редактировалось Beermonza; 01.03.2010 в 15:32.
Вадим Буренков вне форума Ответить с цитированием
Старый 01.03.2010, 05:53   #80
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Сделал управление! Спасибо!
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 01.03.2010 в 12:49.
Андрей 93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 2D играх Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 32 02.11.2010 22:00
Искуственый интелект в играх VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 26 01.08.2009 23:09
Сюжет в 2D играх ZotaC Свободное общение 8 05.07.2009 15:42
Физика программы. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 09.05.2008 18:14
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28