---
title: Bevy
url: 'https://wiki.teletypegames.org/hu/platforms/bevy'
markdown: 'https://wiki.teletypegames.org/hu/platforms/bevy.md'
lang: hu
date: '2026-07-31'
description: 'A Bevy nyílt forráskódú, adatvezérelt játékmotor Rustban. Az állapot komponensekben él, és sima Rust-függvények („rendszerek") futnak rajtuk párhuzamosan — ez az ECS. Vizuális szerkesztő nincs: egy projekt egyszerűen egy Cargo crate, ami jól illik a Makefile + CI munkafolyamathoz. A WebAssembly els…'
taxonomy:
  tag:
    - howto
---

# Bevy

A Bevy nyílt forráskódú, adatvezérelt játékmotor Rustban. Az állapot komponensekben él, és sima Rust-függvények („rendszerek") futnak rajtuk párhuzamosan — ez az ECS. Vizuális szerkesztő nincs: egy projekt egyszerűen egy Cargo crate, ami jól illik a Makefile + CI munkafolyamathoz. A WebAssembly elsőrangú cél, így ugyanaz a kód fut natívan és böngészőben is.

**Weboldal:** https://bevyengine.org

# Tutorialok

- [*The Bevy Book — Getting Started*](https://bevyengine.org/learn/quick-start/introduction/)
- [*Bevy Examples*](https://bevyengine.org/examples/)
- [*Unofficial Bevy Cheat Book*](https://bevy-cheatbook.github.io/)
- [*Bevy ECS explained*](https://bevyengine.org/learn/quick-start/getting-started/ecs/)
- [*Deploying Bevy to the web (WASM)*](https://bevy-cheatbook.github.io/platforms/wasm.html)

---

# Makefile

A natív buildek sima `cargo build` hívások. A webes buildek a `wasm32-unknown-unknown` célra fordítanak, és lefuttatják a `wasm-bindgen`-t a JS-ragasztóréteghez. Az `index.html` vázat exportkor tölti le, így minden játék ugyanazt a betöltőt használja.

A sablonok a [bevy-tools](https://git.teletypegames.org/build/bevy-tools) repóban vannak: másold az `example-makefile.make` fájlt `Makefile` néven, és állítsd a `PROJECT` értékét a `Cargo.toml`-ban szereplő crate-névre.

**A verziórögzítés számít.** A `wasm-bindgen` CLI-nek és a `wasm-bindgen` crate-nek azonos verziójúnak kell lennie:

```toml
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "=0.2.100"
```

Tartsd szinkronban a Makefile `WASM_BINDGEN_VERSION` értékét. A CI-image (`git.teletypegames.org/build/bevy-builder`) a hozzá illő CLI-t hozza — verzióemeléskor építsd újra egy új `--build-arg WASM_BINDGEN_VERSION` értékkel.

## Változók

| Változó | Leírás | Alapérték |
|---|---|---|
| `PROJECT` | A projekt / crate neve | `bevydemo` |
| `WASM_BINDGEN_VERSION` | A CLI verziója, egyeznie kell a Cargo.toml-lal | `0.2.100` |
| `BIN_DIR` | Natív bináris | `bin` |
| `DIST_DIR` | Exportált artifactok | `dist` |
| `VERSION_FILE` | Verziófájl a CI-hez | `.version` |
| `INDEX_HTML_URL` | HTML-váz | bevy-tools `web/index.html` |

## Célok

```sh
make build                   # cargo build --release -> bin/$(PROJECT)
make run                     # cargo run
make wasm                    # release wasm + wasm-bindgen -> dist/game.js, dist/game_bg.wasm
make export VERSION=1.0.0     # wasm + index.html bevydemo-1.0.0.html.zip néven becsomagolva
make watch                   # újraépítés a src/ alatti változásra (fswatch kell hozzá)
make clean                   # a bin/, dist/ és target/ törlése
```

A `make wasm` igényli a célt és a CLI-t:

```sh
rustup target add wasm32-unknown-unknown
cargo install wasm-bindgen-cli --version 0.2.100
```

## VS Code

Másold az `example-tasks.json` fájlt `.vscode/tasks.json` néven. Feladatok: **Run** (alapértelmezett, `Cmd+Shift+B`), **Build & Run**, **Build WASM**, **Make build**.

## Előálló artifactok

| Fájl | Leírás |
|---|---|
| `bin/bevydemo` | Natív release bináris |
| `dist/game.js`, `dist/game_bg.wasm` | wasm-bindgen kimenet (becsomagolás után törlődik) |
| `bevydemo-<verzió>.html.zip` | Webes build |
| `bevydemo-<verzió>-win-x64.zip` | Windows-build (mingw keresztfordítás) |
| `bevydemo-<verzió>-linux-x64.zip` | Linux-build (glibc) |

## Követelmények

Csak helyben: `make`, `git`, `jq`, `zip`, `curl`, a Rust-eszközlánc a `wasm32-unknown-unknown` céllal, egy hozzá illő `wasm-bindgen` CLI, 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/bevy/pipeline.yaml.erb`).

A repóhoz három dolog kell:

```yaml
# .woodpecker.yaml
platform: bevy
name: bevydemo   # 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 teletypegames.org-on a builder a `bevy-ttg`: a `bevy-builder` image, a cargo registryjében az összes TTG-s Rust-projekt crate-jeivel előtöltve, így a build lépések nem töltenek le újra több száz crate-et (egy új függőséget a build ugyanúgy letölt). A segédlépések (version, upload, publish) a `ci-tools` image-ben futnak, amelyben a git, a jq, a curl és a zip előre telepítve van, így semmit nem telepítenek. A kiszolgált pipeline megtekintése:

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

## 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 builder image-ben (a teletypegames.org-on `bevy-ttg`): wasm-build + `wasm-bindgen`, verziózott zipbe csomagolva |
| 3. binaries | natív linux-x64 (glibc) és win-x64 mingw-vel (`x86_64-pc-windows-gnu`) |
| 4. upload | **csak tagre:** a webes zip, a bináris zipek és a `<név>-<verzió>.metadata.json` `POST /build/upload` hívással, `X-Update-Secret` fejléccel |
| 5. publish | **csak tagre:** `POST /build/publish?platform=bevy` |
| 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.

A builder image egy debian alapú Rust-eszközlánc a `wasm32-unknown-unknown` és `x86_64-pc-windows-gnu` célokkal, mingw-w64-gyel és előre telepített `wasm-bindgen` CLI-vel, a bevy-tools `builder.Dockerfile` fájljából építve.

Bináris részletek:

- Az `assets/` könyvtár a bináris mellé kerül becsomagolásra — a Bevy futásidőben tölti be, nincs beágyazva.
- Mac-build nincs: a darwinra keresztfordításhoz osxcross kell, ugyanaz a tervezett eszközlánc, mint az ebitengine mac-céljainál.
- Az API a `<név>-<verzió>-<slug>.zip` fájlokat `win_x64` / `linux_x64` kiadási assetként regisztrálja.
- Egy hidegen induló Bevy release-build több száz crate-et fordít le, tehát a többi motornál jóval hosszabb buildlépésre számíts.

## Demóprojekt

[bevy-demo](https://git.teletypegames.org/demos/bevy-demo) — animált „TELETYPE GAMES" hullámszöveg Bevy 0.16-on, ugyanaz a demó, mint az [ebitengine-demo](https://wiki.teletypegames.org/hu/platforms/ebitengine).

'; 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)
- Next: [Commodore 64](https://wiki.teletypegames.org/hu/platforms/c64.md)
