Как я могу очистить излишки, созданные игроком?

В моей последней игре, которую я делаю, вы можете нарезать 2D-объект произвольно, продемонстрированный в этом gif:

введите описание изображения здесь>> </p>

<p> Вы можете непрерывно разрезать его на сотни или тысячи частей. Это не создает много отставания, потому что они всегда находятся в состоянии физики спящего режима, но есть проблема, когда вы вызываете их движение. </p>

<p> Я не совсем уверен, как справиться с этим, так что не так много обломков от чего-то другого. Я действительно не хочу удалять их через определенное время; Мне не нравится, как, если вы вернетесь к чему-то, что вы отрезали через некоторое время, оно случайно исчезло. </p>

<p> Как я могу очистить излишний игрок, созданный обломками? </p></body></html>

90 голосов | спросил Ducktor 26 J0000006Europe/Moscow 2017, 12:32:28

3 ответа


68

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

Удалить очень маленькие части

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

Предельные игровые сокращения

Безграничные сокращения могут потенциально сделать много ваших головоломок действительно простым, если вы можете просто нарезать каждый препятствующий объект в кучу каши. Дайте игроку только несколько сокращений, чтобы играть (или медленно его перезаряжать), и вы, скорее всего, обнаружите, что это делает ваши головоломки более сложными в дополнение к устранению боли при столкновении с тысячами фрагментов.

ответил Chase Sandmann 26 J0000006Europe/Moscow 2017, 19:01:18
154

Выясните свое узкое место

Несколько сотен движущихся объектов не должны быть проблемой. Однако может быть несколько сотен сталкивающихся объектов. Это займет некоторое тестирование, но я считаю, что узкое место у вас есть столкновение.

Кстати, о том, сколько объектов мы говорим? Что такое платформа? Сто объектов для мобильной игры - это не то же самое, что сто для веб-игры или сотни объектов для настольной игры.

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

Это сообщит ваше решение о том, что вы сделаете для повышения производительности. Не все из приведенных ниже идей будут применяться, и вам все равно потребуется тестирование.


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

  

возникает проблема, когда вы вызываете их.

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

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


Вне границ

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

Я вернусь к этому.


Сделайте больше реалистичным (часть 1)

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

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

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


Изменение передач для небольших объектов

Это будет работать лучше, если столкновение является проблемой.

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

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

Наконец, очень маленькие объекты могут просто превратиться в пыль (эффекты частиц).


Сделайте больше реалистичным (часть 2)

Это будет работать лучше, если столкновение является проблемой.

Материал деформируется и ломается под давлением. Если вы закончите с длинными объектами с очень небольшой толщиной, разбейте их на более мелкие объекты, чтобы они могли воспользоваться вышеприведенным решением.

Мы можем притворяться, что у него слишком мало толщины, что он рушится и ломается, когда вы его ударяете.


Объединить объекты

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

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

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


Сделайте больше реалистичным (часть 3)

Вы слышали о ветре? В реальном мире есть ветер.

Используйте ветер, чтобы оттолкнуть небольшие предметы.

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

Вы можете использовать wind , чтобы оттолкнуть маленький объект до â € "или как только они начнут накапливаться. Это будет работать лучше, если вы используете оптимизацию для небольших объектов (например, они объединяют их или устраняют конфликты между ними). ​​

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

Вы можете удалить некоторые объекты, пока игрок не смотрит, у вас есть мое благословение.

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

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


Бобры!

Некоторый раздражающий бобра приходит и украдет ваш лес!

Теперь у вас есть тип врага!

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


Это все компромиссы

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

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

Пусть творчество исходит из этих ограничений.

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

ответил Theraot 26 J0000006Europe/Moscow 2017, 14:57:45
1

Мир дискретный. Вы не можете сделать объект меньшим, чем пиксель, поэтому не допускайте существования таких объектов. (Это похоже на некоторые точки реализма, сделанные Theraot .)

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

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

Или просто не беспокойтесь об этом. Если игрок готов долго тратить предметы на пыль, они явно не спешат, поэтому могут справиться с задержкой, которую они вызвали. ; -)

ответил David Richerby 28 J0000006Europe/Moscow 2017, 19:02:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132