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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2012, 20:28   #1
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
Вопрос Передвижение персонажа как The White Chamber

Доброго времени суток
Многие знают такой стиль игры как Квест и надеюсь что знаете игру
The White Chamber, мне стало интересно как сделать передвижение персонажа по карте как в игре.

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

Объясните пожалуйста как это можно осуществить?
или как делается движение по траектории в игре zuma?

зарание спасибо
X@OC вне форума Ответить с цитированием
Старый 04.10.2012, 20:43   #2
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

Как я понимаю:
- есть два изображения: фон и передвигаемый объект (если фигурный, значит с прозрачностью или это несколько изображений)
- есть траэктория, если это прямая - то например X=t*Vx+dx, Y=t*Vy+dy в определенных пределах (X,Y это координаты на экране, t время от момента начала движения, Vx, Vy скорость по Х и Y, dx, dy - начальные координаты на экране)
- периодическая прорисовка в зависимости от этих условий формирует третье изображение, обычно используя оптимизированные быстрые функции копирования изображения.
(сначала сюда копируется фон, а потом все остальные объекты)
- это сформированное изображение уже и выводится на экран

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

[ - иногда в таких играх фоновое изображение и изображения объектов прямо лежат в полуоткрытом виде в папке и можно их изменить не меняя код игры]

[ - если есть анимация - объект двигает ножками то в качестве объекта используется несколько изображений которые копируются по очереди]

[ - в круты 3D играх все на много сложнее]

[ - как-то я это и более вычитал из книги "DirectX Графика в проектах Delphi" - если язык программирования подходит и библиотека тоже - то неплохая книга для создания таких игр, для современных 3D игр ее будет маловато, правда там используются не новые ф-ии DX, но присутствующие в каждой версии и их как раз достаточно]
Пишу на чистом С, плюсы спилил.

Последний раз редактировалось LynXzp; 04.10.2012 в 20:49.
LynXzp вне форума Ответить с цитированием
Старый 04.10.2012, 21:17   #3
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

спасибо за ответ
но передвижение по прямой совсем не задача

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

Я понятии не имею как заставить двигать объект по зарание нарисованной кривой(траектории)


если бы вы объяснили принц, было бы очень здорово

спасибо
X@OC вне форума Ответить с цитированием
Старый 04.10.2012, 23:19   #4
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

Ну по совсем кривой если нельзя составить заранее формулу то можно с помощью массива координат например. Но тут возникает вопрос как их получить (не вручную же).

Можно например с помощью интерполяции

Выбрать несколько точек и метод. Правда интерполяция функций не совсем подходит, т.к. функция имеет всегда одно значение Y при любом X. Значит... нужно использовать интеполяцию и Х и Y от t (времени или длинны пройденного пути от начала) как мне кажется.

Правда придется решить проблему всплеска как на рисунке между двумя последними точками.
Я бы попробовал квадратичную интерполяцию со среднеарифметическим усреднением соседней квадратичной интерполяции.
Примерно так: (рассматриваем на рисунке что я привел)
при движении от точки 1 до 2 (точки с соотв. значениями Х) рассчитывать координаты таким образом:
1) строим две квадратичные интерполяции основываясь на точках 0,1,2 = y1(x) и 1,2,3 = y2(x)
2) усредняем их, но не строго пополам, а смотря к какой точке ближе, как-то так:
y=[(2-x)*y1(x)+(x-1)*y2(x)]/2

Проще построить в маткаде проверить метод, будут ли все кривые плавно отображаться без скачков как выше при любых точках, если да то потом нужно выбрать на каждом рисунке как у тебя несколько точек, записать их координаты, интерполировать отдельно для X и Y (вопрос встанет как брать между двумя точками t, думаю можно приблизительно по расстоянию (теорема Пифагора)).

Можно это делать и заранее и записывать в "карту", можно и на этапе "загрузки" карты, а можно вообще вычислять каждый раз. (Для зумы лучше предварительно, а если персонаж 1 то можно и каждый раз)

// Я игры не создаю, но интересно помочь решить задачу и кажется должно работать. И "фильтрами" занимался, это немного похоже на интерполяцию, только наперед не известно значение след. точки.
Пишу на чистом С, плюсы спилил.

Последний раз редактировалось LynXzp; 04.10.2012 в 23:24.
LynXzp вне форума Ответить с цитированием
Старый 05.10.2012, 16:34   #5
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

Спасибо это может помочь LynXzp, а что если использовать
Кривая Безье
можете помочь,из формул выделить X,Y для нарисования тойже линии,
если получиться нарисовать линию то идвижение будет возможным по этим координатам
X@OC вне форума Ответить с цитированием
Старый 05.10.2012, 22:29   #6
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

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

В моем варианте сложно представить как это все будет работать, да и будет ли все так удачно как я думаю
А у кривых Бизье формулы нагляднее и кривые уж точно плавные.

Вот на хабре (php) тоже строили кривую по точкам, может поможет: http://habrahabr.ru/company/mediagates/blog/145411/ (ближе к концу статьи)

Тут тоже обсуждали, в т.ч. и ссылка на библиотеку: http://flashgamedev.ru/viewtopic.php?f=6&t=4558

И тут про кривые вообще много теории: http://www.school66.ru/section/13/

В общем удачи, думаю где-то решение которое вам понравится уже упомянуто.
Все это нашел примерно так: гугло ссылка (там еще много)

Рад был помочь , удачи!
Пишу на чистом С, плюсы спилил.
LynXzp вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать передвижение ползунка слайдера при проигрывании песни jojo97 Общие вопросы .NET 2 05.01.2012 11:46
передвижение между Edit ами стрелоками на клавиатуре. как? Ночной Волк Общие вопросы Delphi 4 05.12.2010 21:22
Как запретить передвижение окна Nester Общие вопросы Delphi 3 06.09.2009 13:50
Совершенствование ИИ персонажа pre_pod Gamedev - cоздание игр: Unity, OpenGL, DirectX 36 29.12.2007 23:56