Google Mapsで鈴鹿サーキット試走 で使っているテクニックを紹介します。
ゲームのソースを見てみてください。なんと、JavaScript 部分は70行ほどです。かなり少ないですよね。たった、70行でゲームを作れてしまうのは、これから説明するような単純な方法で実装しているからなんです。
実は動いていない車
ゲームをプレイしているといかにもドライブしているような感覚になりますが、実は車は回転するだけで、車の表示位置は変わっていません。動いているのは背景の地図だけなのです。
車の表示位置は動いていないのに、走っている感覚になるんですね。こういう表現って、8ビットゲーム機時代にはよくありました。たとえば、スーパーマリオでも、マリオが全速力で走っているときは、マリオの画面中の表示位置は変わらないまま、背景が動いているだけでした。
では、車はどうやって回転させているのでしょう。
バッファリング方式で回転する車
車は回転にあわせて1パターンごとに15度ずつ回転させた24種類の画像を用意しました。24種類ものファイルをサーバー上に置くということは、ページを1回開くごとに、サーバーへのアクセスが少なくとも24回発生してしまうということになります。これではサーバーの負荷となりかねません。
そこで、24種類の車を縦に並べて、1つの縦長の画像にしてしまいました。

これで、24種類の車の回転パターンを一度にダウンロードすることができます。
1枚の長い画像をどうやって回転しているように見せているかというと、この画像を15px×15pxの div タグの中に格納してます。
<style>
#car
{
width: 15px; height: 15px;
overflow: hidden;
z-index:99;
}
</style>
<div id="car"><img src="car.gif"></div>
これで、車1つ分だけが15px×15pxの div タグから顔を出すことになります。
たとえば、車の画像を15px上にずらせば、車が15度分だけ傾きます。30px 上にずらせばさらに15度傾きます。同様にして、 n ×15度回転させるには次のようにしています。
document.getElementById("car").childNodes[0].style.top = (n * -15) + "px";
これで車が回転しているように見えるわけです。

昔の2Dゲームでは、裏バッファにキャラクタのアニメーション素材を用意しておいて、それを順次、表の画面に出力してアニメーションしているように見せていました。ここでも、その手法を踏襲しつつ、サーバーの負荷を転送量を抑えることに成功しているわけです。

Comments
「バッファリング方式で回転する車」
あ、<はだめなんですね。
「バッファリング方式で回転する車」 ←ナイスですね。
すいません、こまかいのですが・・・
「ここでも、その手法を周到しつつ、サーバーの負荷を転送量を抑えることに成功しているわけです。」
手法を踏襲、でしょうか。
> 高橋 さん
気に入っていただけて光栄です。
> nora さん
ありがとうございます。
日本語が苦手なもので。修正しておきました。
最高に楽しいですね。1枚のビットマップから24種類の画像を抽出しているあたり、8bitパソコンでBASICでプログラムを作っていたころの「制限された環境で工夫してがんばる」感覚が思い出されます。
僕もGoogleMapのAPIを使って何か作りたくなってきました。仕事じゃなく、趣味で。
楽しく、素晴らしいですよ。
こんな使い方あるんだぁと、なんか使っていて楽しくて笑ってしまいました。
ナイス・アイディア!!道路の上を走らせるのに、なぜか夢中になる。
センスがイイ。