Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
chongdashu avatar

Love2d Gamedev

  • 79 installs
  • 18 repo stars
  • Updated January 30, 2026
  • chongdashu/love2d-pocket-bomber-game

Build 2D games with the Love2D framework covering game loop, graphics, animation, tilemaps, collision, audio, and iOS deployment.

About

Covers Love2D game development from prototype to release including core architecture, sprites, collision, audio, and mobile deployment. Used when a developer builds a Love2D game or ports it to iOS.

  • Full Love2D loop, graphics, and collision reference
  • Includes iOS deployment guidance

Love2d Gamedev by the numbers

  • 79 all-time installs (skills.sh)
  • Ranked #137 of 247 Game Development skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/chongdashu/love2d-pocket-bomber-game --skill love2d-gamedev

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs79
repo stars18
Last updatedJanuary 30, 2026
Repositorychongdashu/love2d-pocket-bomber-game

What it does

Build 2D games with the Love2D framework covering game loop, graphics, animation, tilemaps, collision, audio, and iOS deployment.

Files

SKILL.mdMarkdownGitHub ↗

Love2D Game Development

Build polished 2D games with the Love2D framework—from first prototype to iOS release.

Quick Reference

TopicWhen to Use
Core ArchitectureUnderstanding game loop, callbacks, modules
Graphics & DrawingImages, colors, transforms, screen adaptation
AnimationSprite sheets, quads, frame timing
Tiles & MapsTile-based levels, map loading
CollisionAABB, circle, and separating axis collision
AudioSound effects, music, volume control
Project StructureFile organization, conf.lua, distribution
LibrariesPopular community libraries
iOS DeploymentBuild, 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

ModulePurposeKey Functions
love.graphicsRenderingdraw, rectangle, circle, print, setColor
love.audioSoundnewSource, play, stop, setVolume
love.keyboardKeyboard inputisDown, keypressed callback
love.mouseMouse inputgetPosition, isDown, callbacks
love.touchTouch inputtouchpressed, touchmoved, touchreleased
love.filesystemFile I/Oread, write, getInfo
love.timerTiminggetDelta, getTime, getFPS
love.windowWindow controlsetMode, getMode, setTitle
love.physicsBox2D physicsnewWorld, 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'tWhyDo Instead
Hard-code coordinatesBreaks on different screensUse percentages or anchors
Forget dt in movementSpeed varies with frame rateMultiply by dt
Load assets in update/drawLoads every frame, kills performanceLoad once in love.load
Use global variables everywhereHard to track, name collisionsUse local variables and modules
Test only on desktopTouch behaves differentlyTest 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: 1. Download Love2D iOS source + Apple libraries 2. Copy libraries to Xcode project 3. Fix deployment target (8.0 → 15.0) 4. Create game.love (zip of Lua files) 5. Add game.love to Xcode bundle resources 6. Configure signing and deploy

---

Philosophy

Love2D makes game development joyful through simplicity:

1. Lua is approachable - Dynamic typing, clean syntax, fast iteration 2. The API is consistent - Functions follow predictable patterns 3. You own the game loop - No hidden magic, full control 4. 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.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.