2010-07-11 3 views
3

Я реализую пошаговую игру, есть две стороны, и каждая сторона имеет несколько единиц, в каждый конкретный момент только один блок может перемещаться по доске.Задержки времени и контроллер вида модели

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

Вопрос заключается в том, поставили бы ли вы алгоритм движения (например, интерполирование между 2 точками в N секунд) в модели, а затем, чтобы представление отображало устройство в интерполированном положении, даже не зная, что оно движется, или телепортируйте и уведомить мнение о том, что он должен показывать устройство как можно лучше.

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

Заранее спасибо, Xtapodi.

ответ

2

А еще один пример, напоминающий нам, что MVC никогда не был изначально предназначен для графики в реальном времени. ;)

Я бы сохранил текущую позицию и предыдущую позицию в модели. Когда объект перемещается, текущая позиция копируется в предыдущую позицию, новая позиция копируется в текущую позицию, и уведомление отправляется в представление, которое изменила модель. Затем представление может быть интерполировано между старой и новой позицией соответственно. Он может ускорять, замедлять или даже полностью удалять интерполяцию на основе определенных параметров просмотра, не требуя каких-либо дополнительных данных для сохранения в модели.

Вместо сохранения текущего положения и предыдущего положения вместо этого вы можете просто сохранить последний ход с каждым устройством, а сам ход содержит предыдущую позицию. Это, вероятно, более универсально, если вам когда-либо понадобится хранить дополнительную информацию о движении.

+0

Спасибо, Килотан. Да, я думаю, что поеду на второе предложение. Поэтому я полагаю, что вы предпочли бы полностью перемещать движение на вид и держать модель простой, если бы вы сами реализовали модель и представление? – Xtapodi

+0

Да. Логическое движение в терминах правил игры - это просто из одного места в другое без промежуточного движения, так что я буду хранить на модели. Физическое перемещение между этими местами - это просто деталь презентации. Если вы сомневаетесь в том, что вставить в модель и что поставить в поле зрения, спросите себя, как вы превратите ее в игру по почте или текстовую игру. – Kylotan

+0

Спасибо, Kylotan, который помог мне вести мой ход мысли :) – Xtapodi

0

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

unitsPerSecond = totalUnits/(framesPerSecond * totalSeconds)

Так что, если я хочу, чтобы переместить изображение из положения 0 в положение 60 в 2-х секунд, и мой фреймрейт 30, мне нужно переместить 60 единиц в 60 кадров, поэтому моя скорость равна 1. Итак, каждый кадр, я перемещаю блок изображения 1, и если перемещение устройства приведет меня к моему месту назначения, просто установите мое местоположение в пункт назначения.

+0

Спасибо, Роб Эллиот, за быстрый ответ. Вопрос заключается не в том, как интерполировать или убедиться, что он находится на корневой позиции в конце. Вопрос заключается в том, что интерполяция находится в модели или в представлении и в результате проблемы синхронизации времени между моделью и представлением в последнем случае. – Xtapodi

Смежные вопросы