Entries

JSでアメーバのシミュレーション作ってみた (高速化編)

先日のJSアメーバのコードを、ブラッシュアップして超高速化してみた
ぬるぬる動いて、2〜3分後には自走して弱小アメーバを襲い始めるよ。

やはり2〜3時間で書いたインチキコードは無駄やバグが多いので、ある程度整理することに。

前バージョンでは、各ノード毎の引力斥力計算を個別にやっていた。
そのため、毎回A→Bの距離と、B←Aの距離をそれぞれ別個に計算してたりして遅くなっていた。

今回のバージョンでは、フレーム毎にまとめてノードの関係性ルックアップテーブルを生成することで、処理を大幅に短縮してみるなど。
8万回だか16万回だか計算していた距離や引力の計算を、2万回に短縮、おかげで割と高速化。
ルックアップテーブルマジ最強。

ここから楽しい描画ルーチンの最適化・・・に進むのだけど、
正直、JavaScript(しかもprocessingフレームワーク状)環境だと、高速化の勘所がまったくわからない。

Flashだったら、

  • Canvasのlineはアンチエイリアスがかかって遅いので、自前pixel操作によるline関数を実装する。
  • 長方形をtransformで回転してlineの代わりにする。
  • Bitmapをtransformで回転してlineの代わりにする。

のあたりのアプローチを検証していけばいいと思うのだけど、JSだとどうなんだろうね。
教えてエロい人。