久々にJavaで何かプログラムを作ってみたくて、前から作りたいと思っていた花火を作ってみました。 思っていた以上に苦労しました。
何より苦労したのがその動き。 世の中には山ほどの花火をテーマにしたスクリーン・セーバーがありますが、たいていどの花火もその火の粉(?)は放物線を描いて広がります。 でも果たして本物の花火はそうなのか? 子供の頃から毎年花火大会を見てきた僕としては、やっぱりその辺の所をおろそかにしたくなかった。 改めて思い浮かべてみると、花火は決して放物線を描いて広がりはしません。 いや、もしかしたら放物線を描いているのかもしれませんが、見てる人には決してそれを意識させません(枝垂れ柳系は別よ)。
それに気づいた僕は思いきって火の粉に放物線を描かせることを止めました。 どうでしょう? よく見る花火ってこんな感じじゃないですか?
まずはオーソドックスな球形に広がる花火と輪っか状の花火を再現してみました。 球形のものも輪っかのものも途中で色が変わるものがあります。 球形のものは消えるときにチカチカ光るものも現れます。 これ、「そういえばこんなのもあったよなー」と最後に追加した演出なのですが、想像以上にきれいに出来ました。 実物も確かこんな感じのはずです。
いろいろ工夫はしたのですが、結構重くなってしまいました。 花火は見た目に寄らず意外と難しいです。
まだまだ追加したいものがあります。 枝垂れ柳系の花火も追加したいし、スターマインもやってみたい。 いつやれるか分かりませんが、ぼちぼち作りこんでいきたいと思います。
今までは火の玉1つ1つを塗りつぶしの円(fillOval)で描いていましたが、これを四角形(fillRect)に変えました。
これにより、かなり処理が軽くなりました。