Fireworks
Program byl napsán do soutěže Ohňostroj v Javě. Nikdo jiný se do této soutěže nezapojil, takže bohužel ani nevím jak by dopadl ve srovnání s konkurencí.
Ovládání
Po zapnutí programu můžete po pravé straně vidět několik ovládacích prvků.
- Start/stop - Můžete vykreslování zastavit třeba v průběhu exploze.
- Ohňostroje - Existují 4 typy ohňostrojů, zde si z nich můžete vybrat.
- Pozadí - Máte na výběr z několika pozadí, jejich účel je jen navození atmosféry.
- Snímek - Kliknutím na tlačítko s ikonou fotoaparátu bude vytvořen snímek plátna. Snímek bude uložen pod aktuálním časem v adresáři, ve kterém byl spuštěn program.
- Zvuk - Tlačítko s ikonou reproduktoru vypíná a zapíná zvuk. Zvuk ale nepracuje úplně správně, takže když ho nezapnete, o nic nepřijdete.
Ohňostroj vytvoříte kliknutím na libovolném místě na plátně.
- Levé tlačítko myši - Aktuální vybraný ohňostroj.
- Pravé tlačítko myši - Předchozí ohňostroj.
- Kliknutí na kolečko - Ohňostroj před předchozím ohňostrojem.
Uvnitř zdrojového kódu
Po kliknutí na plátno se vytvoří nová instance jednoho z potomků třídy code.fire.Firework a následně se zařadí do seznamu mezi ostatní objekty.
Každých několik milisekund se cyklem projde celý seznam a každý z ohňostrojů si projde dalším svým cyklem. Následně se všechny vykreslí na plátno.
Každý ohňostroj je složen z pole částic (code.fire.Point). Částice má několik vlastností - barva, vitalita... Vitalita, životnost je doba (počet cyklů), po kterou se bude částice vykreslovat. Protože pokud budou v ohňostroji částice s rozdílnou životností, ohňostroj bude vypadat alespoň trochu méně uměle.
Samotný výbuch se pak vytváří ze středu do okolí. Poloha částice se vypočítá pomocí goniometrických funkcí:
poziceX = vzdalenostOdStredu * Math.cos(uhelVeStupnich * (Math.PI / 180)); poziceY = vzdalenostOdStredu * Math.sin(uhelVeStupnich * (Math.PI / 180));
Kde vzdálenost od středu je většinou aktuální cyklus.
Ještě k souřadnicím přičteme polovinu šířky a výšky pole - ohňostroj má svůj střed uprostřed, ne v levém horním rohu.
poziceX += sirkaPole / 2; poziceY += vyskaPole / 2;
A nakonec, když už všechny částice vymizí, bude ohňostroj nastaven jako dokončený a při dalším cyklu se odstraní.
Galerie
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 299x (1.79 MB)
Aplikace je včetně zdrojových kódů v jazyce Java