К основному содержанию
скилл CX Codex

love2d-core — скилл для Claude Code: что делает и как установить

Настраивает каркас игры на LÖVE 11.5: цикл love.load/update/draw, движение через dt, стек экранов и ввод. Помогает избежать рассинхронизации скорости от FPS и ошибок с цветом.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill love2d-core -a claude-code
Открыть на GitHub

Что делает love2d-core

Скилл задаёт базовую архитектуру для игры на LÖVE 11.5 в файлах main.lua и conf.lua. Он распределяет логику по стандартным колбэкам, привязывает перемещение к переменной dt и разделяет опрос клавиатуры. Скорость движения остаётся одинаковой при любой частоте кадров.

Внутри описан стек экранов для паузы или меню. Цвета в LÖVE 11.x задаются числами от 0 до 1. Передача старых значений вроде 255 сделает спрайт сплошным белым квадратом.

Настройки окна должны лежать строго в conf.lua. Если объявить love.conf внутри main.lua, движок проигнорирует параметры без каких-либо предупреждений в консоли. Физика Box2D и шейдеры вынесены в отдельные темы.

Какие задачи решает

  • связать колбэки main.lua и настройки окна в conf.lua
  • перевести расчёт движения на умножение через dt
  • разделить опрос зажатых клавиш и разовые события love.keypressed
  • организовать переключение меню и паузы через стек экранов

Примеры запросов агенту

  • Сделай каркас main.lua и conf.lua для игры на LÖVE 11.5
  • Персонаж двигается слишком быстро при высоком FPS, исправь update(dt)
  • Настрой переключение между главным меню и экраном игры через стек

Как установить love2d-core

1Через Skills CLI (Vercel)

npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill love2d-core -a claude-code

2Вручную: положить файлы

~/.claude/skills/love2d-core/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/love2d-core/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о love2d-core

Как установить love2d-core в Claude Code?

Выполните команду npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill love2d-core -a claude-code в терминале проекта.

Что делает скилл love2d-core?

Он предоставляет агенту готовые шаблоны для LÖVE 11.5: структуру главного цикла, масштабирование скорости через dt, разделение типов ввода и работу с экранами.

Почему love.conf нельзя оставлять в main.lua?

Движок LÖVE читает conf.lua до загрузки модулей и запуска main.lua. Функция love.conf внутри main.lua просто не будет вызвана движком.

Исходный текст

SKILL.md · Apache-2.0
---
name: love2d-core
description: >
  Structure and debug a LÖVE (Love2D) game in Lua: the love.load/update/draw loop,
  delta-time movement, input, and screen states. Use when building a LÖVE 11.x game
  (main.lua, conf.lua, .love).
---

# LÖVE (Love2D) Core

Set up and debug the foundation of a LÖVE game in Lua: the callback loop, frame-rate-
independent movement, input, and screen states. Targets **LÖVE 11.5**.

## When to use

- Use when starting a LÖVE game, wiring up `main.lua`/`conf.lua`, or fixing the core loop,
  movement that runs at the wrong speed, input handling, or screen switching.
- Use when the workspace has `main.lua` calling `love.*`, a `conf.lua`, or a `.love` file.

**When *not* to use:** Lua *language* questions unrelated to LÖVE; physics bodies/joints
(LÖVE uses Box2D via `love.physics` — a separate concern); shader code (`love.graphics`
GLSL is its own topic). For cross-engine save/load patterns, use `save-systems`.

## Core workflow

1. **Confirm the entry points.** A LÖVE game runs `main.lua`; it should define
   `love.load()` (one-time setup), `love.update(dt)` (state), and `love.draw()` (rendering).
   Window/version setup goes in `conf.lua` (run *before* modules load).
2. **Pin the version.** Set `t.version = "11.5"` in `conf.lua` so LÖVE warns on mismatch.
3. **Drive all motion by `dt`** (delta time, in seconds) so speed is frame-rate independent.
4. **Handle input** two ways: polled (`love.keyboard.isDown` in `update`, for held keys) and
   event (`love.keypressed` callback, for discrete presses).
5. **Manage screens** (menu, game, pause) with a small state stack rather than a pile of
   `if` flags — see Patterns and `references/state-stack.md`.
6. **Run and observe.** Launch with `love .` from the project folder; verify the window,
   motion speed, and input on screen before assuming it works.

## Patterns

### 1. `main.lua` skeleton (the callback loop + input)

```lua
-- main.lua — LÖVE calls these callbacks for you. Colors are 0–1 in LÖVE 11.x.
function love.load()
    -- One-time setup. speed is in PIXELS PER SECOND, not per frame.
    player = { x = 100, y = 100, size = 40, speed = 220 }
    love.graphics.setBackgroundColor(0.1, 0.1, 0.12)
end

function love.update(dt)
    -- Polled input: good for continuous movement while a key is held.
    if love.keyboard.isDown("right") then player.x = player.x + player.speed * dt end
    if love.keyboard.isDown("left")  then player.x = player.x - player.speed * dt end
    if love.keyboard.isDown("down")  then player.y = player.y + player.speed * dt end
    if love.keyboard.isDown("up")    then player.y = player.y - player.speed * dt end
end

function love.draw()
    love.graphics.setColor(0.2, 0.8, 1.0)                 -- tint ON
    love.graphics.rectangle("fill", player.x, player.y, player.size, player.size)
    love.graphics.setColor(1, 1, 1)                       -- reset tint before text/images
    love.graphics.print("Arrow keys to move, Esc to quit", 10, 10)
end

function love.keypressed(key)
    -- Event input: fires once per physical press. Use for menus, jumps, toggles.
    if key == "escape" then love.event.quit() end
end
```

### 2. Frame-rate independence (the single most common bug)

```lua
-- RIGHT: scaled by dt → same real-world speed at 30 or 240 FPS.
player.x = player.x + player.speed * dt
-- WRONG: "pixels per frame" → moves twice as fast at double the frame rate.
player.x = player.x + player.speed
```

### 3. `conf.lua` (window + version; runs before `main.lua`)

```lua
-- conf.lua — must be its own file; love.conf will NOT run from main.lua.
function love.conf(t)
    t.version = "11.5"             -- the LÖVE version this game targets (string "X.Y")
    t.window.title  = "My LÖVE Game"
    t.window.width  = 800
    t.window.height = 600
    t.window.vsync  = 1            -- number since 11.0: 1 = on, 0 = off, -1 = adaptive
    t.window.resizable = false
    t.modules.physics = false      -- disable modules you don't use to trim startup/memory
end
```

### 4. Color is 0–1 in LÖVE 11.x (not 0–255)

```lua
-- LÖVE 11.x uses normalized floats. (Pre-11.0 code used 0–255 and will look wrong.)
love.graphics.setColor(1, 0, 0)                          -- opaque red
love.graphics.setColor(0.2, 0.8, 1.0, 0.5)               -- translucent cyan (alpha 0.5)
-- Need to convert old byte values? Use the helper instead of dividing by hand:
love.graphics.setColor(love.math.colorFromBytes(128, 234, 255))
```

### 5. Screen states (brief — full manager in references)

```lua
-- A screen is a table with optional :update(dt), :draw(), :keypressed(key).
-- Keep the active screen on a stack so pause/menu overlays are trivial to pop.
local Stack = require("state_stack")   -- see references/state-stack.md for the module

-- Call a method on the top screen only if it defines it (a menu may have no update).
local function forward(name, ...)
    local screen = Stack.current()
    if screen and screen[name] then screen[name](screen, ...) end
end

function love.load()          Stack.push(require("screens.menu")) end
function love.update(dt)      forward("update", dt) end
function love.draw()          forward("draw") end
function love.keypressed(key) forward("keypressed", key) end
```

## Pitfalls

- **Speed varies with FPS** → you forgot `* dt`. Every per-frame change to position, timers,
  or animation must be scaled by `dt`.
- **`love.conf` placed in `main.lua`** → it silently does nothing. It must live in `conf.lua`,
  which LÖVE runs *before* loading modules.
- **Colors washed out or invisible** → you used 0–255 values. 11.x does not rescale them;
  every channel above 1 draws at full intensity, so `setColor(128, 234, 255)` comes out
  plain white and an alpha of `128` is fully opaque. Use 0–1 floats or
  `love.math.colorFromBytes` (11.3+).
- **Everything tinted after one `setColor`** → color is global and persists across draws.
  Reset with `love.graphics.setColor(1, 1, 1)` before drawing text/images you want untinted.
- **Holding a key fires `love.keypressed` only once** → key repeat is off by default.
  Call `love.keyboard.setKeyRepeat(true)` (e.g. for text fields or menu scrolling); the
  repeats then arrive with the third argument `isrepeat` set, so a jump handler can
  ignore them. Releases go to `love.keyreleased(key)`.

## References

- For a complete push/pop screen-state manager (menu → game → pause, with delegated
  callbacks), read `references/state-stack.md`.

## Related skills

- `save-systems` — saving/loading game state (engine-agnostic).
- `input-systems` — rebindable, multi-device input architecture.
- `pygame-core` / `phaser-core` — the same loop concepts in other lightweight engines.

© gamedev-skills · Apache-2.0 · gamedev-skills/awesome-gamedev-agent-skills

Похожие скиллы

Всё по теме «Геймдев и 3D: Unity, Unreal, Godot, Blender» →
lua Mindrally Задаёт агенту правила письма на Lua: таблицы, метатаблицы, обработка ошибок, игровой цикл и работа с памятью. Пригодится, если проект на Lua или Love2D. CX Codex +1 1 300установок msw-scripting MSW-Git Скилл помогает писать скрипты .mlua для MapleStory Worlds, соблюдая архитектуру компонентов и пространств выполнения. Пригодится при разработке игровой логики и отладке в MSW. CX Codex +1 9 900установок roblox-animations sentinelcore Справочник по анимациям Roblox: загрузка треков, приоритеты, замена стандартных анимаций персонажа. Пригодится, когда агент пишет код для Humanoid или рига на AnimationController. CX Codex +1 905установок msw-combat-system MSW-Git Справочник по нативной боевой системе платформы MSW для 2D-игр. Помогает настроить расчёт атак, эффекты попадания и логику поведения врагов. CX Codex +1 9 800установок roblox-animation-vfx TabooHarmony Скилл для ИИ-агента, который помогает писать и чинить анимации, партиклы, лучи, трейлы и твины в Roblox. CX Codex +1 2 300установок roblox-monetization TabooHarmony Скилл для работы с покупками в Roblox: Game Passes, Developer Products, подписки, приватные серверы и проверки политики. Пригодится, когда покупка не выдаёт предмет. CX Codex +1 1 900установок

Из того же набора77

unreal-packaging Помогает собрать проект Unreal Engine 5 в готовый билд через интерфейс редактора или утилиту RunUAT. Пригодится при настройке профилей сборки, кукинге контента и подготовке релизов для CI. CX Codex +1 5 200установок unreal-behavior-trees Скилл помогает собирать AI NPC в Unreal Engine 5 через Behavior Trees и Blackboards. Нужен для врагов, патрулей и реактивных веток поведения. CX Codex +1 5 200установок unreal-niagara Скилл ведёт агента по Niagara в Unreal Engine 5: сборка систем и эмиттеров, модули в стейджах spawn/update, спавн эффектов из Blueprint и C++. CX Codex +1 5 200установок unreal-enhanced-input Помогает настроить систему ввода Enhanced Input в Unreal Engine 5. Полезен при сборке ассетов действий, привязке событий в C++ или Blueprints и отладке управления. CX Codex +1 5 200установок ai-behavior-trees-utility-ai Помогает реализовать деревья поведений и систему Utility AI для игровых NPC. Пригодится при создании логики ботов в Unity или Godot за пределами обычного FSM. CX Codex +1 4 900установок roblox-ui Скилл для сборки интерфейсов Roblox: жизненный цикл ScreenGui, адаптивные UDim2-раскладки, ввод с геймпада и тача. Пригодится, когда UI обрезается или сбрасывается после респавна. CX Codex +1 3 800установок roblox-studio-workflow Скилл задаёт порядок правок в существующих проектах Roblox Studio: от осмотра структуры до проверки в Studio и очистки тестовых объектов. CX Codex +1 3 700установок roblox-networking Скилл для проектирования и защиты клиент-серверной сети в Roblox: RemoteEvent, RemoteFunction, UnreliableRemoteEvent, проверки и лимиты. CX Codex +1 3 500установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой