Вопрос по РПГ (3D вид, но 2D)
|
|
ШарповеЦ | Дата: Понедельник, 10 Января 2011, 15:17 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Доброго времени суток. Командой делаем РПГ с 3D моделями и конвертируем их анимацию в спрайты, так вот получилась загвоздка с поворотами спрайта(движение) хотели сделать чтобы при нажатии на кнопку мыши он шёл и проигрывалась анимация (со всех сторон) видом сверху это можно легко реализовать а вот изометрия (то есть мы смотрим на персонажа как 3D модель уж очень непонятно. Прошу вашей помощи разумеется.
|
|
| |
Eshford | Дата: Понедельник, 10 Января 2011, 19:22 | Сообщение # 2 |
Богиня Гамака ♥
Сейчас нет на сайте
| Можно спросить? ETERNAL GAMES или ETEMAL GAMES???
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 08:08 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Тут выход видится только один: нужно делать анимацию персонажа сразу под разными углами поворота, а потом в зависимости от направления движения проигрывать нужную анимацию. Всю анимацию можно засунуть в один спрайт (т.е. все картинки, для поворота на все углы), а потом просто проигрывать цепочки кадров от N до M. Например вы сделали две анимации, как персонаж идет вверх (90 градусов) и как идет вниз (270 градусов). Рускать каждая анимация состоит допустим из 5 кадров. Все получившиеся 10 кадров помещаем в один спрайт. И когда у нас направление (direction) = 90 градусов, мы проигрываем первые 5 кадров, а когда 270, то проигрываем следующие 5. Другого варианта повернуть спрайт в изометрии я не вижу. Все же в играх изометрия как правило делается в 3D пространстве. Ну а способом который я описал для каждого градуса такую операцию конечно замучаешься делать, поэтому выход вижу только в том, чтобы сделать движение только в 8 направлений (0, 45, 90, 135, 180 и т.д.) или же прикрутить все это к 3D.
|
|
| |
Vicka | Дата: Вторник, 11 Января 2011, 13:47 | Сообщение # 4 |
Another ART
Сейчас нет на сайте
| Quote Ну а способом который я описал для каждого градуса такую операцию конечно замучаешься делать если руками то да. я давно сделал себе заготовку сцены в максе установил на ней 16 каме. достаточно поместить в центр анимированую фигуру и нажать одну кнопку) кадры со всех камер акуратно сделают полный цикл анимаци) а сшить их вместе -как бва байта переслать)
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 14:22 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Так дело не в том чтобы сделать саму анимацию... Дело в коде... в том примере что я написал придется проверять условие для каждого градуса и в соответствии с этим менять направление движения. Можно конечно подумать и сделать проверку циклом, но все же такие игры делаются в 3D пространстве.
|
|
| |
Vicka | Дата: Вторник, 11 Января 2011, 18:57 | Сообщение # 6 |
Another ART
Сейчас нет на сайте
| не понимаю в чем проблема) вычисляем угол относительно мышки от объекта привязываем к нему синквецию. в флеше это элементаррно делается) я думаю в остальных движках тоже) только я тоже не пойму смысл данного мероприятия)
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 19:24 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| Просто я написал сначала пример через одну проверку, без всяких циклов и тому подобного, т.е. Code если угол = 1 градус, тогда показываем кадры от 0 до 5 если угол = 2 градуса, тогда показываем кадры от 5 до 10 если угол = 3 градуса, тогда показываем кадры от 10 до 15 Вот для этого кода, данный способ плох, т.к. придется писать 360 строк. Понятно что данный код можно оптимизировать и упростить, просто я написал саму идею. Можно сделать что то вроде этого: В событии нажатия кнопки мыши пишем Code i=direction(x,y,mouse_x,mouse_y); // записываем в переменную угол g=5*i; // определяем конечный кадр в зависимости от угла Далее делаем так: Code image_index=g-5; // устанавливаем первый кадр из анимации if image_index=g {image_index=g-5;} // если кадр равен последнему кадру из анимации, то возвращаем первый кадр Вроде ничего не напутал. Пошел дальше работать. Да и мне ещё интересно как отразится на спрайте то, что в нем будет 360 кадров. Лучше думаю будет разбить на 8 спрайтов, в каждом по 45 кадров.
Сообщение отредактировал LunarPixel - Вторник, 11 Января 2011, 19:29 |
|
| |
GECK | Дата: Вторник, 11 Января 2011, 19:30 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Quote (LunarPixel) но все же такие игры делаются в 3D пространстве. Эй, а как же старые игры? Там все именно так и делалось. Диабло, варкрафт, нокс, эпоха империй..список продолжите)
Всё гениальное просто. И хреново работает.
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 19:50 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| GECK, могу сказать про Диабло (не знаю точно про остальные, но думаю тоже самое), так вот Диабло работает на основе Direct3D, там насколько я знаю использовалось 3D пространство.
|
|
| |
Vicka | Дата: Вторник, 11 Января 2011, 19:59 | Сообщение # 10 |
Another ART
Сейчас нет на сайте
| LunarPixel, диабло были именно спрайты только на сколько я помню там было всего 8 позиций
|
|
| |
GECK | Дата: Вторник, 11 Января 2011, 20:03 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| LunarPixel, не совсем. Просто для вывода двумерной графики с незапамятных времен используется аппаратное 3д. Вся графика в диабло(что в первом, что во втором) - это простыни отрендеренных с трехмерных моделей спрайтов.Добавлено (11.01.2011, 20:03) --------------------------------------------- А вот в Red Alert 2(про первый не знаю) совмещалась спрайтовая и воксельная графика. Но это уже оффтоп)
Всё гениальное просто. И хреново работает.
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 20:12 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Neia, да, там спрайты были для персонажей, но технология немного другая. Я про пространство говорю, пространство там все же было в 3D. И скорее всего спрайты натягивались на 3D кубы, думаю понятно чем это облегчало работу. Но принцип для поворота все равно тот же что и описан в теме. А вот про количество позиций, кажется да, всего 8... Что нас опять же возвращает к моему первому посту... Даже Blizard сделали 8 направлений, а не 360... Хотя может им просто было лень заморачиваться... Добавлено (11.01.2011, 20:12) --------------------------------------------- GECK, я говорю исключительно про пространство а не про объекты. Объекты то все были спрайтами.
|
|
| |
GECK | Дата: Вторник, 11 Января 2011, 20:18 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Quote (LunarPixel) Хотя может им просто было лень заморачиваться... Просто на спрайте даже пусть 128х128 поворот на 1 градус практически незаметен)Добавлено (11.01.2011, 20:18) --------------------------------------------- LunarPixel, так оно, наверное и было. В 2д так изогнуть ландшафт очень сложно.
Всё гениальное просто. И хреново работает.
|
|
| |
LunarPixel | Дата: Вторник, 11 Января 2011, 20:27 | Сообщение # 14 |
старожил
Сейчас нет на сайте
| Quote (GECK) Просто на спрайте даже пусть 128х128 поворот на 1 градус практически незаметен) Ну мы далеко не про один градус говорим... 360 и 8... как по мне, то большая разница.. (хотя должен сказать, что когда играл в диабло про 8 направлений и не задумывался) Если и в других приведенных тобой в пример играх (да даже если и не так) было далеко не 360 направлений, то ответ по теме думаю ясен. Как я сразу написал, лучше взять 8 направлений и не париться. А реализуется все одним из приведенных мной выше кодов (думаю я там ничего не напутал, но в любом случае идея понятна). Всё, я ушел. Если у кого то есть мысли получше, с удовольствием их позже прочитаю.
Сообщение отредактировал LunarPixel - Вторник, 11 Января 2011, 20:28 |
|
| |