Přeskočit na obsah

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.

Chceš…Pygamedisplayio (CircuitPython)PICO-8picogame
ObrázekSurfaceBitmap + Palettesprite sheetpg.Bitmap(data, w, h, …) (PAL8 nebo RGB565, vícesnímkový atlas)
Pohyblivý objektsprite.SpriteTileGridspr()pg.Sprite(bitmap, x, y) (anchor, flip, frame, scale, angle)
Scénu/světGroup/ručněGroupobrazovkapg.Scene(...) — retained, dirty-rect
Vykreslit toscreen.blit()přidat do Groupspr()/map()jednou scene.add(obj); pak scene.refresh() na každý snímek
Dlážděnou úroveňvlastníTileGrid+Bitmapmap()pg.Tilemap(tiles, cols, rows)tile(x, y, value)
Posouvající se kameruruční offsetGroup.x/ycamera()scene.set_view(ox, oy) (svět větší než obrazovka)
Hlavní smyčkuwhile, flip()while, refresh()_update()/_draw()while: buttons.poll(); …; scene.refresh(); clock.tick()
Vstuppygame.eventkeypad/pinybtn()picogame_input.Buttonsis_pressed() / just_pressed() (poll() pro bitmask)
Zvukmixeraudiocore/audiopwmiosfx()/music()picogame_audio (tone(), .wav)
KolizeRect.colliderectručněručněpg.collide(...) / picogame_collide (zero-alloc, mimo sprity)
Textfont.renderlabelprint()picogame_ui HUD / picogame_font → Bitmap
Mnoho střel/nepřátelsprite groupsručněručněpicogame_pool.Pool (pevný pool, žádná alokace na snímek)
Transformacetransform.rotateomezenéflipy sprsprite.scale (float) + sprite.angle (stupně), nearest-neighbour
  • 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čit MemoryError; předkompiluj do .mpy. Viz Spuštění na hardwaru.

Tvoje rychlá cesta dovnitř

Sekce “Tvoje rychlá cesta dovnitř”
  1. Prolétni Jak picogame funguje (5 min) kvůli smyčce + modelu dirty-rect.
  2. Zkopíruj první hru a spusť ji v simulátoru, ať si API osaháš.
  3. Měj při stavbě otevřený tahák k API a průvodce funkcemi.
  4. Kraď vzory z příkladů — 30+ žánrových portů, každý funkční hra.