From c93070170bcf6018852ee7d4f27eb66f76c2f4b4 Mon Sep 17 00:00:00 2001 From: min Date: Sun, 7 Jun 2026 11:08:28 +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=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B0=20#64=20+=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=8C=D1=8F=20=C2=AB=D0=A2=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D1=87=D0=BD=D1=8B=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=B8=D0=B3=D0=BE=D0=BD=20(=D1=86=D0=B8=D1=84?= =?UTF-8?q?=D1=80=D1=8B=20=D1=83=D1=80=D0=BE=D0=BD=D0=B0)=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Карточка g5 #64 guide-floaters (openProjectId 2676) + статья: game.fx. damageFloater, типы (damage/crit/heal/mana/miss), стек stackKey, comicStyle, object pool. 2 скрина (scene/play) в public/wiki. Co-Authored-By: Claude Opus 4.8 --- src/community/docsGames.js | 5 +++ src/community/docsLessons.jsx | 72 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/src/community/docsGames.js b/src/community/docsGames.js index b7a30fd..59fb4ac 100644 --- a/src/community/docsGames.js +++ b/src/community/docsGames.js @@ -363,4 +363,9 @@ export const GAMES = [ desc: 'Таблица лидеров справа-сверху (монеты/время/уровень) + всплывающие достижения с редкостью и звуком. Прогресс сохраняется в БД между сессиями.', 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 планов (без лагов)'], + previewShot: 'guide-floaters-scene.png', openProjectId: 2676, ready: true }, ]; diff --git a/src/community/docsLessons.jsx b/src/community/docsLessons.jsx index 8a18641..c3281fe 100644 --- a/src/community/docsLessons.jsx +++ b/src/community/docsLessons.jsx @@ -8782,6 +8782,78 @@ game.achievements.unlock('first_coin');`} ), }, + 'guide-floaters': { + body: ( + <> +

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

+

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

+ + + +

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

+

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

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

Типы (цвета)

+ + {`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». +

+ {`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!`} + + + Под капотом — пул из 30 переиспользуемых билборд-планов + (object pool), поэтому даже при спаме десятков цифр FPS не + проседает. Цифры всегда поверх геометрии и повёрнуты к камере. + + +

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

+

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

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