Přicházíš z jiného enginu
Pokud jsi už nějaké hry vydal, tahle stránka tě rychle uvede do tempa: jak se model picogame mapuje na nástroje, které znáš, co umí a kde jsou jeho limity. Pro základní myšlenky v jednoduchých slovech viz Jak picogame funguje; pro přesné signatury referenční příručku API.
Jedna věc, která je jinak: retained mode + dirty-rect
Sekce “Jedna věc, která je jinak: retained mode + dirty-rect”Mnoho 2D enginů funguje v immediate mode: každý snímek vymažeš obrazovku a překreslíš všechno.
picogame je retained mode: jednou postavíš Scene z objektů a pak je každý snímek jen měníš
a voláš scene.refresh(). Engine zjistí, které obdélníky se změnily, a překreslí jen
je, přičemž na displej pošle jen tyto pixely. Nemažeš, neblituješ všechno a
nespravuješ framebuffer. Tohle je to, co dělá engine rychlým na malinkém čipu — a je to hlavní
myšlenkový posun oproti Pygame/SDL.
Jeden důsledek, který je dobré si zapamatovat: pokud změníš pixely bitmapy na místě, dirty-rect tracker
si toho nevšimne — řekni mu to voláním sprite.touch(). Výměna sprite.bitmap/sprite.frame nebo posun
spritu se sleduje automaticky.
Mapa konceptů
Sekce “Mapa konceptů”| Chceš… | Pygame | displayio (CircuitPython) | PICO-8 | picogame |
|---|---|---|---|---|
| Obrázek | Surface | Bitmap + Palette | sprite sheet | pg.Bitmap(data, w, h, …) (PAL8 nebo RGB565, vícesnímkový atlas) |
| Pohyblivý objekt | sprite.Sprite | TileGrid | spr() | pg.Sprite(bitmap, x, y) (anchor, flip, frame, scale, angle) |
| Scénu/svět | Group/ručně | Group | obrazovka | pg.Scene(...) — retained, dirty-rect |
| Vykreslit to | screen.blit() | přidat do Group | spr()/map() | jednou scene.add(obj); pak scene.refresh() na každý snímek |
| Dlážděnou úroveň | vlastní | TileGrid+Bitmap | map() | pg.Tilemap(tiles, cols, rows) — tile(x, y, value) |
| Posouvající se kameru | ruční offset | Group.x/y | camera() | scene.set_view(ox, oy) (svět větší než obrazovka) |
| Hlavní smyčku | while, flip() | while, refresh() | _update()/_draw() | while: buttons.poll(); …; scene.refresh(); clock.tick() |
| Vstup | pygame.event | keypad/piny | btn() | picogame_input.Buttons → is_pressed() / just_pressed() (poll() pro bitmask) |
| Zvuk | mixer | audiocore/audiopwmio | sfx()/music() | picogame_audio (tone(), .wav) |
| Kolize | Rect.colliderect | ručně | ručně | pg.collide(...) / picogame_collide (zero-alloc, mimo sprity) |
| Text | font.render | label | print() | picogame_ui HUD / picogame_font → Bitmap |
| Mnoho střel/nepřátel | sprite groups | ručně | ručně | picogame_pool.Pool (pevný pool, žádná alokace na snímek) |
| Transformace | transform.rotate | omezené | flipy spr | sprite.scale (float) + sprite.angle (stupně), nearest-neighbour |
Co picogame umí
Sekce “Co picogame umí”- Sprity libovolné velikosti s anchory, flipy, vícesnímkovými animačními atlasy.
- Škálování a rotaci za běhu u každého spritu (nearest-neighbour afinní transformace, bez nutnosti FPU), kolem anchoru.
- Tilemapy, které čteš i zapisuješ za běhu (používej je jako herní plány, ne jen pozadí).
- Pohyblivou kameru (
set_view) nad světem větším než obrazovka, s pevnými (HUD) vrstvami. - Particles, kreslicí Canvas (uchovávané tvary) a StripDraw (celosnímkové efekty bez nároků na RAM, jako pseudo-3D silnice).
- Audio (PWM tóny +
.wav), ukládání do NVM pro nejvyšší skóre/nastavení, přibalený font + HUD pomocníky. - Desktopový simulátor: stejný herní kód běží na tvém PC (headless snímky obrazovky nebo živé okno), takže stavíš a ladíš bez hardwaru.
Kde jsou limity (počítej s nimi v návrhu)
Sekce “Kde jsou limity (počítej s nimi v návrhu)”- Málo RAM. RP2040 má ~138 KB využitelné haldy (RP2350 ~520 KB). Assety dominují. Celoobrazovkový
Canvas(320, 240)má ~150 KB — to ne. Rozděl ho do pásů, dlaždic nebo použij StripDraw. Velké sprite sheety se streamují z flash po jednom snímku (StreamSheet). Viz Vejít se do RAM. - Jeden displej, žádné GPU. Žádné shadery, žádné alpha blending. Průhlednost je jediný průhledný
index/barva; pro efekt ztmavení existuje režim
shadow. Transformace jsou nearest-neighbour (ostré při celočíselném škálování, mihotavé při zlomkovém). - Paletová grafika. PAL8 je 1 bajt/pixel (levné); RGB565 je 2 bajty/pixel. Barvy sestavuj pomocí
rgb565(r, g, b)— nikdy ne syrově0xRRGGBB. - Málo tlačítek. D-pad + A/B (a někdy X/Y). Ovládání navrhuj podle toho.
- Dodávej
.mpy, ne velké.py. Kompilace velkého zdrojového souboru přímo na zařízení může skončitMemoryError; předkompiluj do.mpy. Viz Spuštění na hardwaru.
Tvoje rychlá cesta dovnitř
Sekce “Tvoje rychlá cesta dovnitř”- Prolétni Jak picogame funguje (5 min) kvůli smyčce + modelu dirty-rect.
- Zkopíruj první hru a spusť ji v simulátoru, ať si API osaháš.
- Měj při stavbě otevřený tahák k API a průvodce funkcemi.
- Kraď vzory z příkladů — 30+ žánrových portů, každý funkční hra.