Сила кислоти

pic

Так, я знаю, що це насправді не є чимось конкретним, але воно римується. А наступне, що ми збираємось створити, це по суті «негативний» бустер, тому воно досить описове. Воно буде з'являтись в рамках тієї ж системи і працювати так само, за винятком того, що замість додавання, воно буде віднімати. На даний момент у нас є наступні бустери: боєприпаси, здоров’я, потрійний постріл, швидкість, щит та наш супер-спіральний постріл. Наше питання — що саме ми хочемо «зіпсувати»? Коли я вперше задумався над цим, боєприпаси здалися єдиним розумним вибором, або принаймні найпростішим. Зараз, коли я дивлюсь на цей список, більшість або всі варіанти могли б підійти, тому вони можуть з'явитися пізніше.

Зараз ми йдемо з негативним бустером для боєприпасів, тому нам потрібно все необхідне. Ми вже обговорювали, як створити спрайт. Щоб зберегти стиль, ми скопіюємо наш оригінальний спрайт боєприпасів. Ми зробимо три речі, щоб відрізнити його. Перше — ми намалюємо «X» через слово «AMMO». Це досить слабка відмінність, і я не зовсім задоволений цим. Але це передає повідомлення, тому ми створимо новий шар для малювання нашого «X» на зображенні і розмістимо його поверх шару з назвою.

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

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

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

pic

pic

Частина з коду насправді не варта обговорення, бо це в основному просто вирізати й вставити. У класі Player.cs нам потрібно додати новий бустер до нашого все зростаючого оператора switch у методі OnTriggerEnter2D(). Мені це не зовсім подобається, але на даний момент у мене немає кращої ідеї. Також, щоб було простіше, ми додамо новий метод ReduceAmmo() до класу Weapons.cs. Нарешті, в класі SpawnManager.cs ми додамо нову гілку до нашої потворної властивості ChoosePowerUpIndex.

Як ви можете здогадатися з мого тону, хоча я цілком задоволений загальною структурою мого коду, з’являються деякі неприємні моменти. Окрім згаданого оператора switch в Player.OnTriggerEnter2D(), властивість Weapons.ChoosePowerUpIndex — ще одна ділянка, яка має дивні магічні зв'язки та приховані залежності. Як завжди, я знову потрапив у цю пастку. Мені знадобилося кілька хвилин, щоб зрозуміти, чому мій новий бустер не з’являється. Я скопіював і вставив рядок і скоригував діапазон. Я навіть зробив кілька швидких розрахунків, щоб оновити документацію щодо відсотків, з якими кожен бустер має з'являтись, але забув змінити значення, яке повертається.

Я це виправив, воно працює, і все добре. Але я створюю свого роду «повітряну» проблему. Останні кілька завдань вимагають деякої більш досвідченої допомоги. Базові завдання були достатньо легкими, але створення збалансованого відчуття значно складніше. Те, що я маю зараз, здається випадковим, і крім проб і помилок, я зрозумів, що не маю бази знань або досвіду, щоб скористатися ними. Це погано.

А поки що, вперед до наступного завдання. Але я знаю, що це буде, тож попереджений — значить озброєний.
Дизайн рівнів (Level Design) був на моєму радарі з того часу, як я вперше дізнався, що це таке. Тепер я розумію чому. Навіть на найнижчому рівні це не є тривіальним завданням.

Оригінально опубліковано на https://doersofstuff.org 12 січня 2025 року.

Перекладено з: Sour Power

Leave a Reply

Your email address will not be published. Required fields are marked *