Box2D - fyzikální svět - 1. díl
9.4.2009· Autor: Ivan Kuckir·
Počet komentářů: 13
Mnozí z vás jistě viděli na internetu hry, kde je gravitace, můžete věci přsouvat, všechno hezky létá, padá a odráží se. Jak to jen dělají? Ruční tvorba těchto efektů by byla velmi komplikovaná, proto je třeba sáhnout po fyzikálním engine.
Tímto článkem bych chtěl zahájit sérii lekcí o fyzice ve flashi a o enginu Box2D. To vše využijeme jak při tvorbě složitých simulací, tak především při tvorbě her. Takže, pusťme se do toho.
Fyzikální engine
Čas od času člověk potřebuje vytvořit opravdu věrnou simulaci fyziky ve flashovém projektu. Můžeme se pokoušet dělat různé triky a napodobit fyziku aspoň částečně, anebo můžeme sáhnout po něčem, co už vytvořil někdo před námi.
Pro napodobování fyzikálního světa se používají fyzikální engine. Jednoduše lze říci, že to jsou knihovny, které obsahují fyzikální vzorce a provádí výpočty. Dají se rozdělit na 2D enginy a 3D enginy. Existují pro většinu jazyků, ve kterých se aspoň částečně pracuje s grafikou, včetně AS3.
Pro 3D fyziku v AS3 se nejčastěji používá WOW engine (spolupracuje s P3D, Sandy, Away3D). Pro 2D jich existuje mnohem více. Nejpopulárnější jsou:

Box2D vchází na scénu!
Box2D byl původně engine napsaný pro potřeby C++, avšak později byl portován do více jazyků, včetně AS3. Zvolil jsem si právě jej, jelikož je hojně používaný, výborně zdokumentovaný a má dobrou základnu uživatelů.
V tomto článku si povíme nějakou teorii a principy fungování engine, nakonec si engine nainstalujeme, abychom byli připraveni na další článek, kde si vytvoříme první svět.
Jak to tedy funguje?
Možná si někteří myslí, že nahází na scénu MovieClipy, zkompilují, a ty MovieClipy začnou padat dolů a narážet do sebe. Pak nastaví průhledné okraje, aby se MC více odráželi a byli gumovější, možná i změní tvar, aby byl menší odpor vzduchu. Omyl, tak to nefunguje!
Při tvorbě fyzikálních enginů se nejvíce osvědčila koncepce, kdy existuje pouze imaginární fyzikální svět, ve kterém jsou čísla. Do světa se vkládají tělesa, což jsou zase jenom čísla (průměr kružnice, souřadnice vrcholů mnohoúhelníku, hmotnosti, momenty síly, vektory gravitace atd.). Do enginu tedy nějaká čísla zadáváme, ten provede výpočet a další čísla nám zase vrátí. Fyzikální svět může běžet na plné obrátky s desítky těles, přesto na monitoru neuvidíme vůbec nic, můžeme si max. vypisovat souřadnice pomocí trace().
Abychom fyziku také "viděli", potřebujeme herce (actors), tedy objekty, které budou hrát roli naší bedny nebo míče. Právě zde přichází řada na MovieClipy, Sprity a Bitmapy. Nejčastěji se to dělá tak, že při události EnterFrame, tedy po každém snímku, uděláme krok ve fyzikálním světě (world.step(milisekundy), podrobněji příště), poté načteme údaje virtuálních těles a podle nich nastavíme údaje naším hercům (pozici, rotaci ...). Je logické, že by herec měl mít podobný tvar a velikost, jako jeho originál ve fyzikálním světě.
Box2D pracuje s metry, kilogramy a vteřinami. Úhly jsou většinou v radiánech. Často se používají vektory o dvou proměnných (pro pozici (x, y), jako vektory síly atd.) Všechny třídy Box2D začínají na "b2" (b2World, b2Body, b2Joint, b2Vec2 ...). Při programování určitě využijete znalosti matematiky a fyziky, avšak pro začátek nejsou nutné.
Instalace
Nejprve si stáhneme knihovny z http://sourceforge.net/projects/box2dflash.

Ve staženém obsahu si najdeme složku Box2D, buď ji umístíme do hlavní složky s knihovnami (v CS4 to je "C:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\ActionScript 3.0\libs"), nebo ji budeme přikládat ke každému projektu vedle FLA. Pro vyzkoušení můžete zkusit zkompilovat vzory projektů, které jste si v daném balíčku také stáhli (HelloWorld.fla, PhysTest.fla).
Kód budeme psát do externí třídy, tedy do AS souboru. Více o psaní vlastních tříd najdete tady http://flash.cz/portal/clanek.aspx?id=1396
Pokud pracujeme ve Flashi, nastavíme si jako hlavní třídu dokumentu Main.as (což bude ta naše budoucí třída), ve Flexu vložíme UIComponent
<mx:UIComponent width="800" height="600" id="pokus" addedToStage="pokus.addChild(new Main())"/>
Trocha motivace na závěr
Abyste byli do učení také trochu motivováni, prohlédněte si některé projekty, které jsou na daném enginu postaveny. Pokud najdete další, které by stály za zmínku, přidejte je do komentářů.
http://box2dflash.sourceforge.net/ - šipkami přepínáte mezi ukázkami
http://pv3d.org/2009/01/15/rolling-a-sphere-with-keyboard-and-box2dflash-physics/ - box2D pro pohyb 3D objektů
http://iplay.co.in/upload/rafter.swf
http://www.leagueofsuperevil.com/arcade/airvoltar
http://www.a10.com/game/Slammings.html
http://7890.se/games/balance/
http://armorgames.com/play/3157/downhill-snowboard-3
Těšte se na další článek a na vaše první výsledky!
Ivan Kuckir Tvůrce flash her a RIA aplikací, interaktivních webů, začlenění flashe do dalších webových technologií.
E-mail: ivan.kuckir(zavinac)gmail.com |
Web:
www.ivank.net
|
ICQ: 303646153 |
Skype: van010
Motto: Programování sice může být zajímavé, ale jsou i lepší věci. Třeba nejlepší online hry
Seriál:
Box2d - fyzikální svět
Popis fyzikálního engine Box2d pro Flash.