WaveEngine jsem se začal učit letos během soutěže LudumDare, a strašně moc se mi líbil (za 35h jsem v něm udělal kompletní hru, kterou bych jinak dělal týden i víc). Do té doby jsem dělal hry spíš v různých Frameworcích (C# Monogame - tehdy XNA, Java LibGDX, Python Pygame). Zkušenosti mám tedy výhradně s 2D hrami. WaveEngine je v první řadě Engine, což znamená, že už to dělá spoustu věcí za tebe. Oproti tomu Framework je spíš sada nástrojů, a ty si uděláš všechno sám. To znamená, že například budeš ručně plnit metodu render a procházet všechny svoje entity a vykreslovat je na jejich pozici. WaveEngine má úplně skvělý systém scén a entit - pro každou obrazovku ve hře si vytvoříš třídu Scene, a pro každou entitu ve scéně přidáš novou třídu Entity a do ní přidáš komponenty, které potřebuješ, např. Transform2D, Sprite a SpriteRenderer. Transform2D určí pozici a velikost, Sprite drží texturu a SpriteRenderer to vykreslí na obrazovku. A to je vše. Zbytek engine zařídí za tebe. Ve výsledku je pak celá hra spíš taková skládačka - složíš si entity z různých komponent a obrazovku z nejrůznější entit, a ono to všechno samo funguje. Aby se to nějak hýbalo, tak si budeš muset ještě k některým entitám přidat vlastní komponentu s ovládáním a chování, což je taky úplná hračka. Celý Engine má dle mého názoru nádherný objektový návrh. Píše se v tom úplně božsky. Všechno buď přesně tak, jak bych čekal, nebo ještě mnohem jednodušeji. Za asi poslední je, že to má spoustu implementovaných doplňků, já třeba rád používám TiledMapy (Tiled editor map), už zmíněná fyzika v podobě Farseer physics, což je C# varianta Box2D, ale tady je navíc skvěle zabudovaná do jejich komponentového systému, takže většina věcí se napíše místo 20 řádků v Box2D asi tak na 3 řádky ve WaveEngine. Jen mi chvilku trvalo, než jsem přišel na to, jak to celé funguje. Dále tam je třeba Spine, což je nástroj na 2D animace (ten plánuju taky v nejbližší době používat), a například obsahuje i různé Image Effects, což jsou více méně kamerové čočky, např. efekt rybího oka, filmu, 3D brýlí, zrnění atp. To zmiňuju jen ty rozšíření, které jsem používal, myslím, že toho je více. A druhý problém byl, že během soutěže jsem objevil bug v jedné přídavné knihovně, a nemohl jsem to moc odladit, jelikož jsem měl stažené jen binárky. Nicméně jsem objevil, že velkou část zdrojáků mají mirrornutou na GitHubu, a tak jsem si tuhle knihovnu sám opravil a přilinkoval k projektu. Následující výčet je opět pouze z pohledu vývoje 2D her: Výhody Monogame (XNA): - dobrá a rozsáhlá dokumentace, spousta tutoriálů - vlastní návrh struktury aplikace, více si ovlivním vykreslování, vhodné na hodně specifické případy her Výhody WaveEngine: - velmi rychlý způsob psaní her - více méně jen psaní logiky, ne vykreslování atp. - skvěle napsaná knihovna, je radost v ní programovat - spoustu doplňků a rozšíření (TiledMaps, fyzika, Spine, ImageEffects..) - předem daná architektura aplikace - velké množství ukázkových her pokrývající většinu use-casů - vhodné na 90% 2D her, typické věci
|