Як я можу прибрати зайвий створений програвачем щебінь?


92

У своїй останній грі, яку я роблю, ви можете довільно нарізати 2D-об'єкт, продемонстрований у цьому gif:

введіть тут опис зображення

Ви можете безперервно розрізати його на сотні чи тисячі штук. Це не створює великого відставання, оскільки вони завжди знаходяться у сплячому фізичному стані, але виникає проблема, коли ви змушуєте їх рухатися.

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

Як я можу прибрати зайвий створений програвачем щебінь?


17
З вашого запитання не зовсім зрозуміло, чого ви насправді хочете. Ви кажете, що хочете "очистити щебінь", але в той же час говорите, що не хочете, щоб через деякий час щебінь зникав.
Філіпп

10
Tiny & Big знищить дрібніші шматочки. Досить впевнений, що більші шматки залишилися на рівні, але я не пам'ятаю його повністю. Ось приклад: youtu.be/236ly0ApPqg?t=177
TyCobb

2
Речі, які знаходяться поза діапазоном, можна видалити та замінити, коли ви повернетесь до неї.
Лорен Печтел

3
Лише моя маленька думка, але встановіть мінімальний розмір об'єкта, який повинен бути виконаний дією вирізання. Якщо важко виділити шматок, який ви вирізаєте, ви не можете його вирізати. (Тільки ж убік, хороша динаміка гри, у цього, безумовно, ноги!)
AJFaraday

12
Я хотів би заявити, що я не беру на себе кредиту за виготовлення механіки різання, оскільки це безкоштовний актив, який я знайшов у github . Використовуючи приклад, він дає вам уявлення про те, як використовувати його для вирізання об'єктів. (Гравець був кодований мною, так само, як і все інше в грі.
Ducktor

Відповіді:


71

Перш за все, цей ігровий механік виглядає так, що це може бути надзвичайно весело, тому вітаю з його думкою! Ось два простих рішення, які можна було б використовувати самостійно або спільно для вирішення цього конкретного питання:

Видаліть дуже маленькі шматочки

Немає сенсу тримати навколо себе крихітні шматки зіткнення, які насправді не перешкоджають гравцеві або не матимуть реального впливу на навколишнє середовище. Розрахувати додаткову логіку зіткнення просто не варто, тому або видаліть ці шматки, або зніміть зіткнення на них.

Обмежити скорочення гравця

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


1
Подумайте, я зроблю перше, оскільки я не планую робити будь-яку гру-головоломку.
Дактор

36
Micheal Bay це, коли дрібні шматочки теж зникають. Це не колод, це тирса. Або вибуху тирси. чому ні?!
corsiKa

26
@corsiKa Якщо ви додасте якісь палаючі ефекти до руху різання, ви можете змусити зрізи залишити на місцях контактів опіки, певної ширини. Якщо об’єкт настільки малий, що він повністю «випалений», він може спалахнути полум’ям і згоріти за кілька миттєвостей.
Т. Сар

155

З'ясуйте вузьке місце

Кілька сотень рухомих об’єктів не повинні бути проблемою. Однак може бути кілька сотень об’єктів, що стикаються. Пройде певне тестування, але я вважаю, що у вас вузьке місце - це зіткнення.

До речі, про скільки об’єктів ми говоримо? Що таке платформа? Сто об’єктів для мобільної гри - це не те, що сотня для веб-гри, а сто об’єктів для настільної гри.

Перевірте ту саму гру, але зіткнення між вирізаними об'єктами вимкнено, і подивіться, чи не затримаєте ви її на подібних об'єктах. Якщо це так, це означає, що велика кількість предметів є причиною неприємностей; інакше проблема зіткнень.

Це інформує ваше рішення про те, що ви зробите для підвищення ефективності. Не всі наведені нижче ідеї застосовуватимуться, і вам все одно знадобиться тестування.


Я не буду говорити про оптимізацію великої кількості об'єктів, далеких від програвача, оскільки, здається, проблеми виникають при взаємодії з об'єктами.

виникає проблема, коли ви змушуєте їх рухатися.

Якщо проблема виникає під час взаємодії з об’єктами, незрозуміло, як видалення невидимих ​​об’єктів вирішить її ... все ж, я припускаю, що це може допомогти.

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


Поза межами

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

Я повернусь до цього.


Зробіть це більш реалістичним (частина 1)

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

Я говорю, що розріз не є ідеальним, і деякий матеріал буде втрачений. Ви можете моделювати це у своїй грі. Ця чарівна різання червоного кольору має товщину. Видаліть цю товщину з предметів (додайте ефектів частинок, якщо ви відчуваєте себе занадто винними).

Це означає, що ви не зможете вирізати нічого, що менше тієї товщини, насправді спроба зробити це видалить його з гри. Це добре! Це означає, що у верхній межі є кількість щебеню, яка там буде, і є механічно обгрунтований спосіб її очищення в грі.


Міняйте передачі для дрібних предметів

Це буде працювати краще, якщо проблеми будуть зіткненнями.

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

Ви можете поводитися з ще меншими предметами без зіткнення між собою; розглядають лише зіткнення між ними та об’єктами агента (наприклад, аватара гравця або контрольовані символи AI).

Нарешті, дуже маленькі предмети можуть просто перетворитися на пил (ефекти частинок).


Зробіть це більш реалістичним (частина 2)

Це буде працювати краще, якщо проблеми будуть зіткненнями.

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

Ми можемо зробити вигляд, що він мав занадто малу товщину, що він руйнується і ламається при ударі.


Об’єднання об'єктів

Це буде працювати краще, якщо проблема з кількістю об’єктів.

Поширений трюк, який багато ігор використовують для боротьби з великою кількістю краплі, яка може зашкодити продуктивності, - це згуртування крапель разом.

Можна спробувати щось подібне для невеликих предметів, які знаходяться поруч. Нехай вони стануть єдиним об’єктом. Однак я не маю на увазі склеювати шматки. Я маю на увазі створити єдиний об’єкт для обробки їх фізики; Ви все ще можете представляти окремі фрагменти, що складали об'єкт, можливо, використовуючи методи, подібні до ефектів частинок.


Зробіть це більш реалістичним (частина 3)

Ви чули про вітер? У реальному світі вітер.

Використовуйте вітер, щоб відштовхнути дрібні предмети.

Я знаю, що це може здатися протилежним інтуїтивно зрозумілим, бо це означає, що дрібні предмети не отримують спокою, принаймні не відразу. Прочитайте нижче, перш ніж приймати рішення.

Ви можете використовувати вітер, щоб відштовхнути невеликий предмет до того, як вони почнуть накопичуватися. Що буде краще, якщо ви використовуєте оптимізацію для невеликих об’єктів (наприклад, комбінуючи їх або видаляючи зіткнення між ними).

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

Ви можете видалити деякі предмети, поки гравець не дивиться, у вас є моє благословення.

На додаток до цього, тепер у вас є привід додати вітер, який ви можете додати вітру як частину іншої механіки чи перешкод у грі. Ви навіть можете додати в розповідь дух вітру, який намагається утримувати речі в чистоті, якщо ви так схильні.

Примітка : Вам не обов’язково запускати вітер, коли для очищення є сміття (хоча це може спрацювати), можливо, вітер може траплятися з випадковими інтервалами.


Бобри!

Якийсь дратівливий бобер підійде і вкраде ваш ліс!

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

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


Це все компроміси

Існують обмеження платформи чи вибраних вами інструментів, навіть час і бюджет, який ви маєте на розробку гри, є обмеженням. Ви не можете зробити ідеальну імітацію реальності, тим НЕ менш . Ніхто не може .

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

Нехай творчість виходить із цих обмежень.

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


36
Цей пост - остаточна відповідь на проблему переповнення щебеню. Ви надали вичерпний підсумок методик, а також чітко демонструєте необхідність творчості та підбору рішень, які відповідають вашим обставинам, а також показуєте, як механіка та розповідь можуть протікати разом. Я просто хотів сказати, що у мене виникають труднощі в вираженні того, як я вражений.
Драгомок

12
Спроба вирізати об'єкт, менший за ширину променя, не повинен зникати зовсім, але натомість може отримати один менший об'єкт. Важливо те, що кількість об'єктів можна збільшити лише у тому випадку, якщо вирізаний об’єкт перевищує ширину променя.
supercat

1

Світ дискретний. Ви не можете надати об'єкт розміром менше пікселя, тому не допускайте існування таких об'єктів. (Це схоже на деякі моменти реалізму, зроблені Тераотом .)

Дійсно, ви можете отримати це безкоштовно: гравець визначає їх лінію зрізу як по суті дискретизовану лінію на екрані. Ефект розрізу полягає в тому, щоб розділити кожен об'єкт на суб'єкти, що складаються, відповідно, з пікселів на цій лінії або під нею та пікселів строго над нею. Об'єкт на один піксель, можливо, не може бути і над, і під лінією, тому його не можна вирізати цим алгоритмом.

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

Або просто не турбуйтеся про це. Якщо гравець готовий витрачати довгий час на різання предметів у пил, вони, очевидно, не поспішають, щоб вони могли впоратися із спричиненим відставанням. ;-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.