終電を逃した帰り道に、ビルの窓を数えるくせがあります。
こんな時間なのに、まだ明かりのついた部屋がいくつもある。
あの一つひとつに人がいて、それぞれの夜があるのだと考えると、なぜか少しだけ救われます。
その景色を、画像も動画も使わずに、HTML・CSS・JavaScriptのCanvasだけで作りました。
高架を電車が走り、空を飛行機が横切り、押せば花火も上がります。
ドラッグすると、街を左右に見渡せます。
CITY LIGHTS都会のビル群
ドラッグで街を見渡せます
夜の街の見方
ボタンは画面の下にまとめてあります。
夕暮れから深夜まで、好きな時間の街を探してみてください。
- 時間:スライダーを左に寄せると夕暮れ、右に寄せると深夜になります。深夜ほど空が暗くなり、点いている窓の数が増えて、星が見え始めます
- 天気:晴れ・雨・雪から選べます。雨の日は路面が濡れて街の明かりが映り込み、雪の日は粒がゆっくり舞います
- 花火:夜空に打ち上がります。上がる光の尾、開く瞬間の閃光、散っていく火の粉まで描いています
- 電車:高架を5〜7両編成が走り、窓明かりが下の道路をなぞります
- 飛行機:空の高いところを、赤い衝突防止灯を点滅させながら横切ります
- ドラッグ:手前のビルほど大きく動き、奥のビルはゆっくり流れます
- 街の音:低いざわめきが流れ、ときどき車が通り過ぎていきます
じっと1か所を見ていると、誰かが帰宅した瞬間や、誰かが寝た瞬間に立ち会えます。
私はこれを眺めながら書いているうちに、また終電を逃しました。
この街のつくり
見た目重視で作ったので、しくみは簡単なメモだけにしておきます。
外部ライブラリは使っていません。
窓の明かりの塗り直し方
毎回ぜんぶの窓を描く
塗った窓 累計
480
点き消えした窓だけ
塗った窓 累計
20
※青い枠が、その回に塗り直した窓です。1棟24窓・20回切り替えた場合の例。実際の切り替えは0.25秒ごとで、ここでは見やすく遅くしています。
いちばん時間を使ったのは、窓の配置でした。
等間隔に並べると、ビルではなく表計算ソフトに見えます。
ビルの上のほうだけ幅を狭める段差を入れ、列ごとに窓の大きさと間隔を変えたところ、ようやく街になりました。
- 画面の外にあるときは描画を止めて、スクロール中の負荷を抑えています
- OSで「動きを減らす」設定をオンにしている人には、止まった状態で表示します
- 手元の環境では60fpsで動いています

