Механика Knife Hit в Construct 3
Вступление
Ребят в этой статье разберём, как сделать механику в стиле Knife Hit в Construct 3. Идея вообще простая: игрок нажимает на экран, нож резко летит вверх и должен попасть в бревно. Если нож попал — он застревает и начинает вращаться вместе с ним. Если попал в другой нож — игрок проигрывает.
На первый взгляд механика кажется очень простой, но в ней есть несколько важных моментов. Нож должен не просто медленно ехать вверх, а ощущаться как быстрый бросок. После попадания он должен правильно прикрепляться к бревну. А при столкновении с другим ножом он должен не зависать в воздухе, а красиво физически падать вниз.
В этом уроке мы сделаем базовую механику:
- бревно будет постоянно вращаться;
- нож будет резко лететь вверх после клика;
- при попадании в бревно нож будет прикрепляться к нему;
- после успешного попадания будет появляться новый нож;
- при попадании в другой нож будет проигрыш;
- добавим счёт за успешные попадания;
- добавим яблоко как бонусный объект.
Мы не будем делать полноценную игру с уровнями, магазином ножей и сложной системой прогресса. Главная задача — собрать понятную и рабочую основу, которую потом можно будет спокойно развивать дальше.

Что подготовить на сцене
Перед тем как писать события, подготовим объекты на сцене. Лучше сразу назвать их понятно, потому что дальше мы будем использовать эти названия в событиях.
Нам понадобятся:
log— круглое бревно, в которое будет попадать нож;
knife— основной нож, который игрок бросает;
apple— бонусное яблоко;
appleicon— иконка яблока для интерфейса;
ScoreText— текст для счёта попаданий;ApplesText— текст для количества собранных яблок;background— фон;Mouse— объект мыши для клика.
Для log нужно добавить поведение Rotate. Благодаря этому бревно будет крутиться само, и нам не придётся каждый кадр вручную менять угол.
Настройки для Rotate:
Speed: 180
Acceleration: 0
Если хочется, чтобы бревно крутилось быстрее, можно поставить 220 или 250. Если нужно спокойнее — 120 или 150.
Для объекта knife добавим поведения:
Bullet
Pin
Physics
Bullet нужен для быстрого полёта ножа вверх.
Pin нужен, чтобы нож прикреплялся к бревну после попадания.
Physics нужен для проигрыша, когда нож попадает в другой нож и падает вниз.
У поведения Bullet можно оставить такие настройки:
Speed: 0
Acceleration: 0
Gravity: 0
Set angle: No
Важно, чтобы Set angle был выключен. Иначе нож может начать поворачиваться по направлению движения, а нам это не нужно.
У поведения Physics лучше поставить:
Immovable: No
Prevent rotation: No
Density: 1
Friction: 0.5
Elasticity: 0.2
Enabled: No
Physics должен быть выключен в начале игры. Мы включим его только в момент проигрыша, когда нож столкнётся с другим ножом.
Теперь добавим переменные для knife.
У объекта knife создаём boolean instance variables:
isFlying = false
isStuck = false
isFalling = false
Они нужны, чтобы понимать состояние ножа:
isFlying— нож сейчас летит вверх;isStuck— нож уже воткнут в бревно;isFalling— нож падает после проигрыша.
Также создадим две глобальные переменные:

Score будет отвечать за количество успешных попаданий в бревно.
Apple будет отвечать за количество собранных яблок.

Бросок ножа
Теперь сделаем первый важный момент — бросок ножа вверх.
Логика простая: когда игрок нажимает левую кнопку мыши, мы проверяем, что нож сейчас не летит, не воткнут и не падает. Если всё нормально — запускаем его вверх через поведение Bullet.
Событие выглядит так:

В Construct 3 угол -90 означает движение вверх.
0 = вправо
90 = вниз
180 = влево
-90 = вверх
Скорость 3500 даёт ощущение резкого броска. Если нож летит слишком быстро, можно уменьшить значение до 2500 или 3000. Если хочется ещё более резкий бросок — можно поставить 4000.
Главное здесь — не делать движение ножа через обычное изменение Y, если хочется получить ощущение броска. Через Bullet нож летит намного приятнее и проще контролируется.
Попадание в бревно
Теперь сделаем успешное попадание.
Когда нож касается log, нам нужно:
- остановить нож;
- выключить состояние полёта;
- отметить, что нож воткнут;
- прикрепить нож к бревну;
- создать новый нож снизу;
- добавить очко к счёту.
Событие:

Здесь важный момент — после попадания нож не просто останавливается. Мы используем Pin, чтобы нож начал вращаться вместе с бревном.
То есть нож будет повторять позицию и угол относительно бревна, но не будет менять размер.
После попадания мы создаём новый knife снизу:
System → Create object knife on layer "Layer 0" at (log.X, 1600)
log.X нужен, чтобы новый нож появлялся ровно по центру под бревном.
1600 — это позиция по Y. В твоём проекте она подходит под текущий размер layout. Если нож появляется слишком низко или слишком высоко, можно просто изменить это значение.
Например:
Y = 1500
или
Y = 1650
Ещё мы используем:
knife → Move behind log
Это нужно, чтобы воткнутые ножи визуально были за бревном. Так кажется, будто нож действительно вошёл внутрь, а не лежит поверх круга.
Столкновение с ножом
Теперь добавим проигрыш.
Если летящий нож попадает в уже воткнутый нож, он не должен прикрепляться к бревну. Вместо этого нож должен остановиться, включить физику, начать падать и крутиться.
Событие столкновения с другим ножом лучше поставить выше события попадания в бревно. Это важно, потому что если события стоят в неправильном порядкее, Construct может сначала обработать попадание в log, и нож воткнётся, хотя должен был проиграть.
Событие:

Что здесь происходит:
Bullet speed to 0останавливает полёт;isFlying = Falseговорит, что нож больше не летит;isFalling = Trueпереводит нож в состояние падения;Pin → Unpinна всякий случай отвязывает нож от объектов;Physics enabledвключает физику;Set angular velocityзаставляет нож крутиться;Apply impulseтолкает нож вниз;- через 3 секунды layout перезапускается.
Угол 90 означает движение вниз. Значение impulse можно подбирать под свой масштаб.
Если нож падает слишком слабо:
Impulse: 120
Если слишком резко:
Impulse: 40
В нашем случае значение 80 выглядит нормально для текущего размера сцены.
Здесь есть один нюанс. Так как мы используем один и тот же объект knife и для активного ножа, и для воткнутых ножей, Construct может иногда выбирать не тот экземпляр. В простом прототипе эта схема работает нормально, особенно если новый нож всегда является последним созданным объектом.
Если в будущем механика станет сложнее, можно будет разделить объекты на knife и stuckknife. Но для учебной версии это необязательно. Нам сейчас важнее показать сам принцип механики.
Счёт и яблоко
Теперь добавим счёт.
У нас уже есть глобальная переменная:
Score = 0
Когда нож успешно попадает в бревно, мы добавляем:
System → Add 1 to Score
А чтобы текст обновлялся на экране, добавляем событие:

Теперь после каждого попадания число на экране будет увеличиваться.
Теперь добавим яблоко.
В Knife Hit яблоко обычно работает как бонус. Оно находится на бревне, крутится вместе с ним, а если нож попадает в яблоко — яблоко исчезает, и игрок получает дополнительный бонус.
Для объекта apple добавляем поведение:
Pin
На старте layout прикрепляем яблоко к бревну:
Теперь яблоко будет вращаться вместе с бревном.
Дальше добавляем событие попадания ножа в яблоко:

Важно: в этом событии мы не останавливаем нож. Яблоко — это не препятствие, а бонус. Нож должен разрезать яблоко и продолжить движение дальше, чтобы попасть в бревно.
В итоге логика получается такая:
knife попал в log = +1 Score
knife попал в apple = +1 Apple
knife попал в knife = проигрыш
Это простая, но уже понятная игровая схема. У игрока есть основная цель — попадать в бревно, и дополнительная цель — собирать яблоки.
Что можно улучшить дальше
Сейчас у нас получилась базовая механика Knife Hit в Construct 3. Она уже работает: нож летит вверх, втыкается в бревно, создаётся новый нож, есть проигрыш при столкновении и бонусное яблоко.
Но эту основу можно развивать дальше.
Например, можно добавить разные уровни. На первом уровне бревно вращается медленно, а дальше скорость постепенно увеличивается. Ещё можно иногда менять направление вращения, чтобы игроку было сложнее выбирать момент броска.
Также можно добавить ограниченное количество ножей на уровень. Например, игроку нужно воткнуть 6 ножей, не попав в уже существующие. Когда все ножи использованы — уровень пройден.
Для яблока можно сделать красивый эффект разрезания. Сейчас оно просто исчезает, но можно подготовить две половинки яблока, которые будут разлетаться в стороны. Это сразу сделает попадание более приятным.
Ещё можно добавить:
- звук броска ножа;
- звук попадания в бревно;
- звук проигрыша;
- частицы при попадании;
- тряску камеры;
- разные скины ножей;
- босс-брёвна;
- сохранение рекорда;
- меню рестарта.
Главное — не добавлять всё сразу. Лучше сначала сделать простую механику, проверить, что она ощущается приятно, а потом постепенно улучшать её маленькими деталями. Всем спасибо за просмотр, еще увидимся :)