node.js(socket.io) + tmlib.jsでオンラインゲームを制作中です。制作中なので、満足に動くかどうかもまだ分かっていない状態ですが、ひとまず公開しておこうと思います。今後処理を追加したり、アップデートしたらTwitterにて呟いていきます。
サンプル
実際に以下のURLからプレイできます。
スマートフォン(iPhone4s:iOS6)も動作することを確認済みです。
以前に公開した、「RoguePlus」というゲームをオンライン化している途中です。敵を倒しながらアイテムを拾い、レベルを上げつつ下の階へ降りていくというゲームです。色んな人と一緒にローグライクできたら面白そうだなーと思ってオンラインゲームにしようとしてます。
ソースコードも公開しています。仮想サーバに置いてみて実験してみたりなど遊んでみてください。
実装済みの処理
現在実装済みの処理は以下になっています。
実装済みの処理 | |
---|---|
内容 | マップを同期して表示 |
内容 | キャラクター(ユーザ)の座標を同期して表示 |
内容 | キャラクター(敵)の座標を同期して表示 |
内容 | キャラクター(敵)のヒットポイント、消滅の同期 |
内容 | キャラクター(敵)の一定期間経過による生成 |
これくらいしか作ってないので、下の階に降りることも会話することもできません。また、敵が攻撃を受けた際のダメージ表記も、サーバからダメージ量を取得してから描画を行うのでスマートフォンだと遅れて表示されます。ここらあたりどうするか悩み中です。クライアントだけで計算して表示することもできますが、通信が滞るといくら攻撃してダメージを与えても死なない……なんてこともありえますし。
環境
現在稼働しているサンプルの環境は以下になっています。
サーバー環境 | |
---|---|
契約プラン | さくらサーバー:さくらのVPS SSDプラン |
OS | CentOS |
メモリ | 1GB |
CPU | 仮想2コア |
サーバ構成 | |
---|---|
HTTPサーバ(プロキシサーバとして使用) | Nginx |
アプリケーション(同一サーバ内) | node.js + socket.io + express + forever |
データベース | 現在未使用(mongoDB利用予定) |
クライアント用ライブラリ | tmlib.js |
今回制作しているゲームの使用するリソースがどれくらいの割合になるのか分かっていません。もし触ってくれる方が増えてくるとスペックが足りない場合も出てきます。とりあえず、複数のアプリケーションを同時に運用できるように上記の構成にしています。
当たり判定を含めた座標管理、アイテムの管理などなどサーバ側で管理しなければならないものがあります。その中で間引ける計算や通信は非常に大切です。でないとすぐにサーバのスペックをオーバーしてしまいます。もし参考になる書籍やWEBサイトなどご存知の方がいらっしゃれば、Twitterにて連絡をくれると非常に助かります。