[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программы и игры » Обсуждение пользовательских программ и игр » Хотел бы обсудить с вами, как сделать "плавную" камеру
Хотел бы обсудить с вами, как сделать "плавную" камеру
GreenDanДата: Понедельник, 01.03.2010, 19:49 | Сообщение # 1
Группа: Проверенные
Сообщений: 146
____________________
Почетный гость
____________________
Репутация: 3 ±
Замечания: ±
В целях оптимизации в моём редакторе сделана система зон, в каждой из которых есть объекты, расставленные произвольно(подразумевается, что объект может находится в координатах 377; 445 к примеру). Не могу додумать, как сделать "плавную" камеру в игре. Могу объяснить то, как я думаю её сделать, но это займёт много времени и 50 процентов, что я объясню неясно (это не какая-нибудь отмазка) =).
Хотел бы спросить, как у вас в игре реализована эта самая плавающая камера? Спасибо за внимание


SaiLightДата: Понедельник, 01.03.2010, 20:29 | Сообщение # 2
Ведущий программист
Группа: Администратор
Сообщений: 312
____________________
Активист
____________________
Репутация: 8 ±
Замечания: ±
Кстати, насчет игры. Сегодня под вечер или завтра выложим информацию о процессе разработки. Теперь насчет камеры. Ну, прежде всего, камера - это только обозначение. На самом же деле это смещение каждого объекта на карте. Само движение камеры у нас выглядит следующим образом:

Code
if (vFCam.Up) and (vCam.Y + cCamSpeed < 0) then begin
     vCam.Y := vCam.Y + cCamSpeed;
   end;

Это движение камеры вверх, взятое из редактора. Здесь:

vFCam.Up - флаг, отвечающий за то, что нажата кнопка W, то есть, кнопка, которая отвечает за движение камеры вверх.

vCam.Y - координаты камеры, то есть, показатель, на сколько смещаеются все объекты на карте.

cCamSpeed - скорость перемещения камеры.

Само рисование карты происходит следующим образом:

Code
for i := -vCam.Y div 50+1 to -vCam.Y div 50+(tvPole.Height div 50)+2 do begin
       for j := -vCam.X div 50+1 to -vCam.X div 50+(tvPole.Width div 50)+2 do begin
vObshee.Canvas.Draw(vCam.X + j * 50 - 50, vCam.Y + i * 50 - 50, aTextures[aPole.TexNum[j, i]]);

Ну, здесь происходит, также, проверка на то, какие текстуры нужно рисовать. Рисуются только текстуры, находящиеся на экране. tvPole - это то, на чем рисуется карта. Его ширина и высота и являются в данном случае тем самым 'экраном', на котором рисуются текстуры.

Ну, код сложен, но разобраться можно. Если будут вопросы, задавай.

Кстати, вот вызов движения камеры не из редактора, а из игры (код взят из первой части Galaxy Boom):

Code
if (vPlayer.Y <= 250 - vCamY) and (vCamY < 0) then begin
     vCamY := vCamY + vPlayer.Speed;
   end;


GreenDanДата: Понедельник, 01.03.2010, 20:45 | Сообщение # 3
Группа: Проверенные
Сообщений: 146
____________________
Почетный гость
____________________
Репутация: 3 ±
Замечания: ±
Насчёт игры хорошая новость =).

Это понятно, что камера только имитация. Если я скину сюда свой редактор, возможно ты поймёшь, какая у меня проблема встала =)
Зону добавлять кнопкой +. Добавлять изображение кнопкой + рядом с полем ввода.
P.S. Вот кстати с кнопкой минус, которая удаляет изображение долго мучился и движок раза три переписывал ради процедуры. Плюс все структуры динамические, что вызывает сложность
P.S.S. Насчёт камеры уже додумался, как сделать в игре.

Прикрепления: WorldEdit.rar (181.7 Kb)




Сообщение отредактировал GreenDan - Понедельник, 01.03.2010, 20:47
SaiLightДата: Понедельник, 01.03.2010, 20:56 | Сообщение # 4
Ведущий программист
Группа: Администратор
Сообщений: 312
____________________
Активист
____________________
Репутация: 8 ±
Замечания: ±
Quote (GreenDan)
P.S.S. Насчёт камеры уже додумался, как сделать в игре.

Значит, с камерой ясно уже? Зоны, как я понял, это экраны, по которым двигается игрок. Когда он доходит до конца экрана, то переходит на следующий, так?

GreenDanДата: Понедельник, 01.03.2010, 21:19 | Сообщение # 5
Группа: Проверенные
Сообщений: 146
____________________
Почетный гость
____________________
Репутация: 3 ±
Замечания: ±
Как раз таки нет. Камера должна перемещаться за игроком. Плавно. И с зонами потому "маленькие" проблемы. Но уже нашёл решение =)

Форум » Программы и игры » Обсуждение пользовательских программ и игр » Хотел бы обсудить с вами, как сделать "плавную" камеру
  • Страница 1 из 1
  • 1
Поиск: