From c20ac56895acf56504470fc9df007202ca032ba1 Mon Sep 17 00:00:00 2001 From: min Date: Sun, 7 Jun 2026 14:18:53 +0300 Subject: [PATCH] =?UTF-8?q?docs(studio):=20=D0=B2=D0=B8=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=2040=20=E2=80=94=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=B7=D0=BE=D0=BC=D0=B1=D0=B8-=D0=B0=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D1=83=20(=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=20+?= =?UTF-8?q?=20autoMobFloaters=20+=20=D0=B2=D0=BE=D0=BB=D0=BD=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Карточка #64 «Зомби-арена — бластер и цифры урона» + статья переписана: giveTool бластер, autoMobFloaters (авто-облачко над мобами), spawnNpc+follow волны зомби, прицел в точку клика, ручной damageFloater (типы/стек/комикс). Новые скрины scene/play (зомби-шутер). Co-Authored-By: Claude Opus 4.8 --- src/community/docsGames.js | 6 +-- src/community/docsLessons.jsx | 89 ++++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 41 deletions(-) diff --git a/src/community/docsGames.js b/src/community/docsGames.js index 59fb4ac..40a4d65 100644 --- a/src/community/docsGames.js +++ b/src/community/docsGames.js @@ -364,8 +364,8 @@ export const GAMES = [ mechanics: ['game.leaderstats.define / me.add', 'HUD-таблица топ-10 (сортировка по primary)', 'game.achievements.define / unlock', 'bindToStat — авто-награда по статy', 'toast 4 редкости + очередь', 'кубок → страница достижений', 'сохранение в БД (savegame)'], previewShot: 'guide-leaderstats-scene.png', openProjectId: 2616, ready: true }, { id: 'guide-floaters', num: 64, group: 'g5', stars: 2, icon: 'sparkles', - title: 'Тренировочный полигон — цифры урона', - desc: 'Всплывающие цифры урона над целью (как в Roblox-RPG): красный урон, жёлтый крит с pop-эффектом, зелёный хил, синяя мана, серый «Промах», стек «×N» и комикс-стиль BAM!/KAPOW!.', - mechanics: ['game.fx.damageFloater(pos, value, opts)', 'isCrit / isHeal / isMana / isMiss — цвет', 'подъём + плавное затухание + покачивание', 'crit — pop-эффект (scale 1→1.3→1)', 'stackKey — стек одинаковых в «×N»', 'comicStyle — BAM!/KAPOW! на звезде', 'object pool 30 планов (без лагов)'], + title: 'Зомби-арена — бластер и цифры урона', + desc: 'Шутер: волны зомби бегут к игроку, бластер их отстреливает, над целью всплывают облачка урона. Авто-floater над любым мобом одной строкой + ручной game.fx.damageFloater (крит/хил/мана/промах/стек/комикс).', + mechanics: ['game.fx.damageFloater(pos, value, opts)', 'game.fx.autoMobFloaters(true) — облачко над NPC при уроне', 'game.player.giveTool(\'blaster-...\') — бластер', 'бластер от 3-го лица — в точку клика', 'spawnNpc + follow(\'player\') — зомби-волны', 'isCrit/isHeal/isMana/isMiss, стек ×N, комикс', 'object pool 30 планов (без лагов)'], previewShot: 'guide-floaters-scene.png', openProjectId: 2676, ready: true }, ]; diff --git a/src/community/docsLessons.jsx b/src/community/docsLessons.jsx index c3281fe..8ef5032 100644 --- a/src/community/docsLessons.jsx +++ b/src/community/docsLessons.jsx @@ -8787,68 +8787,81 @@ game.achievements.unlock('first_coin');`} <>

Что получится

- Тренировочный полигон с манекенами. При ударе над целью - всплывает цифра урона — как в Roblox-RPG (Pet Sim, Anime - Adventures): красный обычный урон, жёлтый КРИТ с подскоком, - зелёный хил, синяя мана, серый «Промах». Одинаковые удары - собираются в стек «×N», а в комикс-режиме вместо цифр — BAM! и KAPOW!. + Мини-шутер: волны зомби бегут к игроку, ты отстреливаешь + их из бластера, а над каждой целью всплывает облачко + урона — как в Roblox-RPG (Pet Sim, Anime Adventures). Зомби + гибнут, счётчик растёт, волны усиливаются.

- + -

Главный метод

-

Одна строка рисует всплывающую цифру в нужной точке мира:

- {`game.fx.damageFloater(position, value, opts)`} -
    -
  • position — точка {'{x,y,z}'}, ссылка на объект или 'player';
  • -
  • value — число (урон) или строка («Промах», «BLOCKED»);
  • -
  • opts — стиль: цвет и тип эффекта.
  • -
- -

Типы (цвета)

+

Шаг 1. Бластер + авто-облачка над мобами

+

+ Две строки превращают игру в шутер с фидбеком урона: выдаём + бластер и включаем авто-floater — теперь любой урон + по NPC сам рисует «-N» над целью, вручную вызывать ничего не надо. +

+ {`game.player.giveTool('blaster-blaster-a', { equip: true }); // бластер в руки +game.fx.autoMobFloaters(true); // облачко урона над любым мобом при попадании`} + +

Шаг 2. Волны зомби, идущих к игроку

+ {`function spawnWave(n){ + const pl = game.player.position; + for (let i = 0; i < n; i++){ + const a = (i / n) * Math.PI * 2; + const e = game.scene.spawnNpc('skin_retro-zombie', { + x: pl.x + Math.cos(a)*18, z: pl.z + Math.sin(a)*18, + name: 'Зомби', hp: 100, speed: 2.6, + }); + if (e && e.follow) e.follow('player'); // зомби преследует игрока + } +} +game.after(1.5, () => spawnWave(5)); +game.every(14, () => spawnWave(8));`} +

+ Стрелять из бластера — ЛКМ. В режиме от 3-го лица пуля летит + туда, куда кликнул курсором. Попал по зомби → облачко + урона (благодаря autoMobFloaters), убил → засчитан. +

+ +

Ручной floater — все типы

+

Когда нужен полный контроль — рисуй цифру сам:

{`game.fx.damageFloater(pos, 25); // красный — обычный урон game.fx.damageFloater(pos, 80, { isCrit: true }); // жёлтый, больше + подскок game.fx.damageFloater(pos, 30, { isHeal: true }); // зелёный — лечение (+30) game.fx.damageFloater(pos, 50, { isMana: true }); // синий — мана game.fx.damageFloater(pos, 'Промах', { isMiss: true }); // серый текст`} - -

Стек одинаковых ударов

- При AOE по одной цели десятки цифр сливаются в кашу. Передай - общий stackKey — и удары соберутся в один floater «×N». + position{'{x,y,z}'}, ссылка на объект или + 'player'; value — число или строка.

- {`for (let i = 0; i < 10; i++) { - game.fx.damageFloater(enemy.position, 25, { stackKey: 'aoe_' + enemy.id }); -} -// → один floater «-25 ×10» вместо десяти отдельных`} -

Комикс-стиль

-

- Для казуальных игр — comicStyle: true: вместо чисел - рисуется «BAM!» (урон >50), «KAPOW!» (>100), «POW!» (крит) на - жёлтой звезде-вспышке. -

- {`game.fx.damageFloater(pos, 120, { comicStyle: true }); // KAPOW!`} +

Стек и комикс-стиль

+ {`// общий stackKey → удары сливаются в «-25 ×N» вместо кучи цифр +game.fx.damageFloater(enemy.position, 25, { stackKey: 'aoe_' + enemy.id }); +// comicStyle → BAM! (>50), KAPOW! (>100), POW! (крит) на жёлтой звезде +game.fx.damageFloater(pos, 120, { comicStyle: true });`} Под капотом — пул из 30 переиспользуемых билборд-планов - (object pool), поэтому даже при спаме десятков цифр FPS не + (object pool), поэтому даже при толпе зомби и спаме цифр FPS не проседает. Цифры всегда поверх геометрии и повёрнуты к камере.

Почему это важно

- Без всплывающих цифр любой удар ощущается «впустую». Это базовый - боевой фидбек: игрок видит, сколько нанёс, был ли крит, попал ли - вообще. Сочетается с боевыми механиками и способностями. + Без облачек урона стрельба ощущается «впустую». Это базовый + боевой фидбек: игрок видит, сколько нанёс, был ли крит, попал ли. + Связка бластер + autoMobFloaters + волны NPC — готовый + каркас любого шутера/выживания.

Сделай «огненный» урон: damageFloater(pos, 15, {'{'} color: - '#ff7a2a' {'}'}) каждые 0.5 сек 3 раза подряд — эффект - горения (-15… -15… -15). + '#ff7a2a' {'}'}) каждые 0.5 сек 3 раза — эффект горения. + Или увеличь HP зомби и добавь крит каждый 5-й выстрел. ),