TGViewer
Moth Moth @namlessmoth · 44 subscribers
Post #77 25
Давайте сделаем смену анимаций персонажу. Например когда он идёт будет одна анимация, когда летит - другая, когда атакует третья и т.д.
Одновременно у персонажа может проигрываться только одна анимация и когда включается другая, то предыдущая выключается. Такой механизм проще все описать с помощью машины состояний. Чтобы определить состояния нашей моли давайте добавим такой компонент: state("idle", ["idle", "fly", "walk", "cut", "bite", "jump"]),
Полный код моли теперь выглядит так:

let player = add([
controllerComp(joystick),
animatorComp(joystick),
state("idle", ["idle", "fly", "walk", "cut", "bite", "jump"]),
sprite("moth"),
anchor("center"),
scale(4),
pos(80, 80),
area({ scale: vec2(1/5,1/5) }),
body(),
]);

Про машину состояний написано в документации kaboomjs.com/#state .

Чтобы переключать состояния и анимации давайте создадим новый компонент animatorComp в новом файле импортируем его game.js и добавим игроку. Мы это уже умеем делать. Затем сделаем так чтобы в воздухе проигрывалась анимация полёта, а на земле - спокойствия:
export default function animatorComp(joystick) {
return {
id: "animatorComp",
require: ["pos"],

add() {
this.onFallOff(() => {
this.enterState("fly")
})

this.onStateEnter("fly", () => {
this.play("fly")
})

this.onGround(() => {
this.enterState("idle")
})

this.onStateEnter("idle", () => {
this.play("idle")
})
},
update() {

},
}
}
События onFallOff и onGround добавляются объекту компонентом body, kaboomjs.com/#BodyComp
А событие onStateEnter компонентом state kaboomjs.com/#StateComp
так же как и метод enterState
Если переводить код на русский, то там написано: когда объект (моль) начинает падать она входит в состояние полёта, когда она входит в состояние полёта, то включается анимация полёта. Когда моль приземляется включается состояние покоя и вместе с состоянием покоя включается анимация покоя. Всё максимально просто и понятно.
  • ❤ 1
More from @namlessmoth
  1. Mar 7, 2026Как сломать босса одним прокачанным навыком Причём первую заратану я победил точно так же,…
  2. Mar 3, 2026Наиграл уже 150+ часов и даже не прошел половину игры Мне капец как не везёт почти в каждо…
  3. Feb 17, 2026Один месяц подписки на впн Вдруг кому надо https://t.me/gruVPNbot?start=g_UZhunlWNfFC_2127…
  4. Feb 16, 2026оставлю тут, чтобы не потерять вам смотреть нельзя, это только для меня
  5. Feb 13, 2026Вчера сделал всего три задания и все три оказались не правильными 1) Задание: Проведите ре…
  6. Feb 12, 2026Оказалось что всё-таки можно сдавать несколько заданий за один раз. Я вчера сдал 7 заданий…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →