Симуляция падающего песка - PullRequest
1 голос
/ 11 января 2011

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

ДляНапример, один из типов частиц, который я хотел бы иметь, это Plant.Когда Растение вступает в контакт с Водой, Растение превращает эту частицу Воды в другую частицу Растения.Проблема здесь заключается в том, что если я обновляю игровой мир сверху вниз и слева направо, то частица Растения, помещенная в середину моря частиц воды, немедленно вызовет попадание всех частиц воды вправо и вниз.эта новая частица растения, чтобы превратиться в растения.Это не то поведение, которое я ожидаю.= (

Ответы [ 2 ]

4 голосов
/ 11 января 2011

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

0 голосов
/ 13 января 2011

Не программируйте это последовательно (циклически по всем частицам), но используйте реальные методы моделирования, в которых каждая частица рассматривается как отдельный объект / агент, который подчиняется законам физики и может действовать (работать) асинхроннои реагировать на «события» (взаимодействия с другими частицами).

Если сделать каждую частицу песка отдельным объектом слишком мелкозернистым, разделите мир на маленькие блоки, скажем, 1000 частиц, и симулируйте поведениеэти блоки вместо.

...