
love2d-gamedev
Complete Love2D game development from prototype to polished release. Covers core architecture, graphics, animation, tiles, collision, audio, and iOS deployment. Use when building Love2D games, implementing game mechanics, or deploying to mobile platforms.
- Installs
- 93
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/chongdashu/love2d-pocket-bomber-game --skill love2d-gamedev- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads love2d-gamedev automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Love2D Game Development
Build polished 2D games with the Love2D framework—from first prototype to iOS release.
Quick Reference
| Topic | When to Use |
|---|---|
| Core Architecture | Understanding game loop, callbacks, modules |
| Graphics & Drawing | Images, colors, transforms, screen adaptation |
| Animation | Sprite sheets, quads, frame timing |
| Tiles & Maps | Tile-based levels, map loading |
| Collision | AABB, circle, and separating axis collision |
| Audio | Sound effects, music, volume control |
| Project Structure | File organization, conf.lua, distribution |
| Libraries | Popular community libraries |
| iOS Deployment | Build, touch controls, App Store |
The Love2D Game Loop
Every Love2D game follows this pattern:
function love.load()
-- Called once at startup
-- Load assets, initialize state
end
function love.update(dt)
-- Called every frame
-- dt = time since last frame (seconds)
-- Update game logic here
end
function love.draw()
-- Called every frame after update
-- All rendering happens here
end
Key insight: dt (delta time) ensures consistent speed across frame rates.
-- WRONG: Speed varies with frame rate
player.x = player.x + 5
-- RIGHT: 200 pixels per second, regardless of FPS
player.x = player.x + 200 * dt
Essential Patterns
Loading and Drawing Images
function love.load()
playerImage = love.graphics.newImage("player.png")
end
function love.draw()
love.graphics.draw(playerImage, x, y)
-- Full signature: draw(image, x, y, rotation, scaleX, scaleY, originX, originY)
end
Input Handling
-- Polling (check every frame)
function love.update(dt)
if love.keyboard.isDown("left") then
player.x = player.x - 200 * dt
end
end
-- Event-based (fires once per press)
function love.keypressed(key)
if key == "space" then
player:jump()
end
end
Screen-Adaptive Positioning
Never hard-code screen dimensions:
function love.load()
screenW, screenH = love.graphics.getDimensions()
end
function love.resize(w, h)
screenW, screenH = w, h
end
function love.draw()
-- Position relative to screen
local centerX = screenW / 2
local bottomY = screenH - 50
end
Core Modules
| Module | Purpose | Key Functions |
|---|---|---|
love.graphics | Rendering | draw, rectangle, circle, print, setColor |
love.audio | Sound | newSource, play, stop, setVolume |
love.keyboard | Keyboard input | isDown, keypressed callback |
love.mouse | Mouse input | getPosition, isDown, callbacks |
love.touch | Touch input | touchpressed, touchmoved, touchreleased |
love.filesystem | File I/O | read, write, getInfo |
love.timer | Timing | getDelta, getTime, getFPS |
love.window | Window control | setMode, getMode, setTitle |
love.physics | Box2D physics | newWorld, newBody, newFixture |
Project Setup
Minimal Project
my-game/
├── main.lua # Entry point (required)
└── conf.lua # Configuration (optional but recommended)
conf.lua Template
function love.conf(t)
t.window.title = "My Game"
t.window.width = 800
t.window.height = 600
t.version = "11.5" -- Love2D version
t.console = true -- Enable console on Windows
-- Disable unused modules for faster startup
t.modules.joystick = false
t.modules.physics = false
end
Running the Game
# macOS
/Applications/love.app/Contents/MacOS/love /path/to/game
# Create alias in ~/.zshrc
alias love="/Applications/love.app/Contents/MacOS/love"
Common Patterns
State Management
local gameState = "menu" -- menu, playing, paused, gameover
function love.update(dt)
if gameState == "playing" then
updateGame(dt)
end
end
function love.draw()
if gameState == "menu" then
drawMenu()
elseif gameState == "playing" then
drawGame()
end
end
Object-Oriented Entities
local Player = {}
Player.__index = Player
function Player:new(x, y)
return setmetatable({
x = x, y = y,
speed = 200,
image = love.graphics.newImage("player.png")
}, Player)
end
function Player:update(dt)
if love.keyboard.isDown("right") then
self.x = self.x + self.speed * dt
end
end
function Player:draw()
love.graphics.draw(self.image, self.x, self.y)
end
return Player
Camera/Viewport
local camera = { x = 0, y = 0 }
function love.draw()
love.graphics.push()
love.graphics.translate(-camera.x, -camera.y)
-- Draw world objects here
drawWorld()
love.graphics.pop()
-- Draw UI here (not affected by camera)
drawUI()
end
Anti-Patterns to Avoid
| Don't | Why | Do Instead |
|---|---|---|
| Hard-code coordinates | Breaks on different screens | Use percentages or anchors |
Forget dt in movement | Speed varies with frame rate | Multiply by dt |
Load assets in update/draw | Loads every frame, kills performance | Load once in love.load |
| Use global variables everywhere | Hard to track, name collisions | Use local variables and modules |
| Test only on desktop | Touch behaves differently | Test on device early |
iOS Development
For iOS deployment, see the iOS Overview which covers:
- Build Setup - Xcode project, libraries, signing
- Touch Controls - Virtual joysticks, buttons, gestures
- Xcode Project Structure - Manual pbxproj editing
Quick iOS checklist:
- Download Love2D iOS source + Apple libraries
- Copy libraries to Xcode project
- Fix deployment target (8.0 → 15.0)
- Create
game.love(zip of Lua files) - Add
game.loveto Xcode bundle resources - Configure signing and deploy
Philosophy
Love2D makes game development joyful through simplicity:
- Lua is approachable - Dynamic typing, clean syntax, fast iteration
- The API is consistent - Functions follow predictable patterns
- You own the game loop - No hidden magic, full control
- Cross-platform by default - Same code runs on Windows, macOS, Linux, iOS, Android
The goal isn't just "make it work." The goal is "make it feel great."
Smooth animations, responsive controls, adaptive layouts—that's the standard for polished games.
FAQ
What does the love2d-gamedev skill do?
Complete Love2D game development from prototype to polished release. Covers core architecture, graphics, animation, tiles, collision, audio, and iOS deployment. Use when building Love2D games, implementing game mechanics, or deploying to mobile platforms.
How do I install love2d-gamedev?
Run npx skills add https://github.com/chongdashu/love2d-pocket-bomber-game --skill love2d-gamedev in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/love2d-gamedev/ (personal) or .claude/skills/love2d-gamedev/ (project).
Which AI agents can use love2d-gamedev?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is love2d-gamedev safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains love2d-gamedev?
It is published by chongdashu in chongdashu/love2d-pocket-bomber-game. It has 93 recorded installs.
Popular media & creative skills
hyperframes
heygen-com/hyperframes
Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.
media-use
heygen-com/hyperframes
Get or make any media for a HyperFrames video - music, sound effects, images, icons, logos, voiceover, avatar and generated video, transcripts, cutouts, colour grades and looks - with HeyGen or free local tools, and mix placed audio. Also for footage that looks dark, flat or dull, or should be stylized or hidden.
hyperframes-registry
heygen-com/hyperframes
About 450 ready-made HyperFrames blocks and components installed as editable source - transitions, overlays, titles, kinetic type, captions, charts, map overlays, 3D, camera moves. Use it before hand-building any named visual (CRT scanlines, glitch, film grain, a chart); also for hyperframes add and catalog.
hyperframes-creative
heygen-com/hyperframes
Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.
ai-video-generation
101-skills/superpowers
Generate AI videos with Google Veo, Seedance 2.0, HappyHorse, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, reference-to-video, video editing, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative, seedance, happyhorse
ai-image-generation
101-skills/superpowers
Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image, gpt image, openai image, chatgpt image