---
title: Löve
url: 'https://wiki.teletypegames.org/hu/platforms/love'
markdown: 'https://wiki.teletypegames.org/hu/platforms/love.md'
lang: hu
date: '2026-03-03'
description: 'A LÖVE (Love2D) könnyűsúlyú keretrendszer 2D játékokhoz, Luában. Prototípusokhoz és kis-közepes méretű játékokhoz jó. Weboldal: https://love2d.org Makefile Egy LÖVE-játék .love archívumként kerül kiadásra. A webes build ugyanez az archívum, love.js-szel összecsomagolva. Változók Változó Leírás …'
taxonomy:
  tag:
    - howto
---

# Löve

A LÖVE (Love2D) könnyűsúlyú keretrendszer 2D játékokhoz, Luában. Prototípusokhoz és kis-közepes méretű játékokhoz jó.

**Weboldal:** https://love2d.org

---

# Makefile

Egy LÖVE-játék `.love` archívumként kerül kiadásra. A webes build ugyanez az archívum, `love.js`-szel összecsomagolva.

## Változók

| Változó | Leírás | Alapérték |
|---|---|---|
| `PROJECT` | A kimeneti fájlnevekben használt név | `love2ddemo` |
| `BIN_DIR` | Buildidejű ellenőrzések | `bin` |
| `DIST_DIR` | Csomagolt artifactok | `dist` |
| `WEB_DIR` | Webes fájlok | `dist/web` |
| `LOVE_NAME` | Az előálló .love fájl | `love2ddemo.love` |
| `VERSION_FILE` | Verziófájl a CI-hez | `.version` |

## Célok

```sh
make build                   # luac szintaxisellenőrzés minden .lua fájlra
make love                    # becsomagolás a dist/love2ddemo.love fájlba (kihagyja: .git, Makefile, dist/)
make web                     # love.js letöltése, a dist/web/ összeállítása, index.html + player.js foltozása
make export VERSION=1.0.0     # mindkettő, love2ddemo-1.0.0.love.zip és -1.0.0.html.zip néven becsomagolva
make watch                   # újraépítés .lua változásra (fswatch kell hozzá)
make clean                   # a bin/ és a dist/ törlése
```

## VS Code

Másold az `example-tasks.json` fájlt változtatás nélkül `.vscode/tasks.json` néven. Feladatok: **Run Löve** (alapértelmezett, `Cmd+Shift+B`), **Build & Run Löve**, **Build .love package**, **Make build**.

## Előálló artifactok

| Fájl | Leírás |
|---|---|
| `dist/love2ddemo.love` | LÖVE-csomag |
| `love2ddemo-<verzió>.love.zip` | Becsomagolt .love |
| `love2ddemo-<verzió>.html.zip` | Webes build |
| `love2ddemo-<verzió>.metadata.json` | Metaadat a terjesztéshez |
| `love2ddemo-<verzió>-win-x64.zip` | Összeolvasztott Windows-build (exe + dll-ek) |
| `love2ddemo-<verzió>-mac-universal.zip` | Összeolvasztott univerzális `.app` |
| `love2ddemo-<verzió>-linux-x64.zip` | Összeolvasztott AppImage |

## Követelmények

Csak helyben: `make`, `luac`, `zip`, `unzip`, `curl`, `sed`, watch módhoz pedig `fswatch`. A CI-image-ek hozzák a saját eszközeiket.

---

# Pipeline

A pipeline nincs benne a játékrepóban. A Woodpecker az update szervertől kéri el, a WarpEngine pedig a teljes konfigurációt a `/build/config` végponton szolgálja ki (sablon: `lib/warp_engine/ci/woodpecker/platforms/love/pipeline.yaml.erb`).

A repóhoz három dolog kell:

```yaml
# .woodpecker.yaml
platform: love
name: love2ddemo   # csak akkor, ha a szoftvernév eltér a repó nevétől
```

- `metadata.json`
- az `application_token` Woodpecker-secret: egy WarpEngine ApplicationToken az `update` + `upload` jogosultságokkal

A builder image-ek az update szerver `ci_platforms` konfigurációjából jönnek. A kiszolgált pipeline megtekintése:

```sh
curl "https://teletypegames.org/build/config?platform=love"
```

## Lépések

| Lépés | Mit csinál |
|---|---|
| 1. version | az engine közös lépése (a WarpEngine 1.7 óta): a verzió a `metadata.json`-ból; tagnél a verziótagnek egyeznie kell vele; a repó alapágán kívül és egy `dev-<ág>` tagen `dev-<verzió>-<ág>`, verzió nélkül `dev-<commit>`; megírja a `.version` fájlt |
| 2. build | a `love-builder` image-ben: becsomagolja a `.love` fájlt, felépíti a `love.js` webes csomagot, a névvel és verzióval megfoltozza a lejátszót és a HTML-t, majd mindkettőt becsomagolja |
| 3. binaries | beolvasztja a `.love` fájlt a hivatalos LÖVE kiadási artifactokba |
| 4. upload | **csak tagre:** átmásolja a `metadata.json` fájlt `love2ddemo-<verzió>.metadata.json` néven, majd fájlonként `POST /build/upload` az `X-Update-Secret` fejléccel |
| 5. publish | **csak tagre:** `POST /build/publish` a `name`, `platform`, `version` paraméterekkel |
| 6. tag | az engine közös lépése (a WarpEngine 1.9 óta), **csak push után**: a forrás új verziója megkapja a `v<verzió>` tagjét, és annak pipeline-ja futtatja a *csak tagre* jelölt lépéseket; egy már tagelt verzió nem ad ki semmit; egy dev build az ág `dev-<ág>` tagjét a commitra helyezi, így mindig a legfrissebb dev build van kiadva. Lásd: *Verziók és kiadások* a [WarpEngine](https://wiki.teletypegames.org/hu/engines/warp-engine) oldalon |

A verzió emelése maga a kiadás: a push buildel és tagel, a tag pipeline-ja tölt fel és publikál (WarpEngine 1.9). Egy push, amely nem emeli a verziót, csak buildel.

Az összeolvasztás platformonként:

- **win-x64** — a `love.exe` és a `.love` összefűzve, a dll-ekkel együtt
- **mac-universal** — a `.love` a hivatalos univerzális `love.app` belsejében, az `Info.plist` a projekt nevére foltozva
- **linux-x64** — összeolvasztott AppImage, `mksquashfs`-sel újraépítve. Az AppImage-runtime glibc-hez linkelt, ezért soha nem fut le az alpine builderen; a squashfs-eltolás a `readelf` kimenetéből jön.

A LÖVE dist-fájljai az image gyorsítótárából, a `/opt/love-dist/` könyvtárból jönnek, GitHubról történő curl-tartalékkal.

```sh
curl -X POST -H "X-Update-Secret: <SECRET>" \
  "https://teletypegames.org/build/publish?name=love2ddemo&platform=love&version=1.0.0"
```

## Eredmény

Egy webes csomag és három összeolvasztott asztali build, mind verziózva, feltöltve és publikálva. A `.love` csomag ezekbe épül be; a WarpEngine 1.7 óta önmagában már nem töltődik fel (egyik assetfajta sem vette át). A nyilvános játékindex magától frissül.

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Platformok](https://wiki.teletypegames.org/hu/platforms.md)
- Previous: [Godot](https://wiki.teletypegames.org/hu/platforms/godot.md)
- Next: [Phaser](https://wiki.teletypegames.org/hu/platforms/phaser.md)
