ブラウザでも動く簡易 2D ゲームライブラリ Ebiten を Go で作った

  • 45
    いいね
  • 3
    コメント

Ebiten (海老天)

https://hajimehoshi.github.io/ebiten/

概要

Ebiten

年末年始休みを費やして Go でゲームライブラリ Ebiten の新バージョン 1.1.0-rc1 をリリースしました。特徴は以下の通り:

  • Go を使ったゲーム開発
    • 楽しい!
  • シンプルな API
    • スクリーンもテクスチャも全部 ebiten.Image 構造体で表されます。 Ebiten における描画は ebiten.Image に ebiten.Image を描画する形だけでほぼすべて表現されます (v1.1.0-rc1 時点)。また、 ebiten.Image 構造体は image.Image インターフェイスを実装しているため、例えば描画中の画面を PNG にデコードして保存なども簡単にできます。
  • 2D グラフィックス
    • アルファブレンディング
    • 行列演算による描画 (幾何変換および色変換)、いずれもシェーダ (GLSL) で実行されるので高速
    • オフスクリーンレンダリング (画面ではなくテクスチャを描画対象とした描画)
  • キーボード、マウスによる入力
  • GopherJS を使ったブラウザ上での実行
    • Chrome、 Firefox、 Safari で動作確認
    • JavaScript を一切書かなくても、ブラウザで動くゲームが作れる!
  • Apache License ver 2.0

追記 (2017-05-17): マルチプラットフォーム対応です。 Windows、 macOS、 Linux、 FreeBSD、 Android、 iOS、 Web ブラウザで動きます。

コントリビュートはご気軽に!

サンプル

お絵かきソフトみんなが知っているブロックを消すゲームなど。その他 Ebiten Web サイトからどうぞ。

インストール方法

追記および修正 (2017-05-27): 詳しくは公式の Wiki をどうぞ。各プラットフォームごとに準備方法が異なります。

:; go get github.com/hajimehoshi/ebiten

GopherJS を使う場合は以下のライブラリも必要になります:

:; go get github.com/gopherjs/gopherjs
:; go get github.com/gopherjs/webgl

ブラウザで自分のゲームを動かす方法

GopherJS で Go ファイルからゲームの JavaScript を生成した後、以下のような HTML を (HTTP サーバー経由で) 開けばゲームが動きます:

<!DOCTYPE html>
<script src="yourgame.js"></script>

JavaScript が自動的に canvas 要素を作って表示してくれます。Ebiten ゲームの JavaScript を埋め込んだ HTML に他の要素を書くことはできません。そうしたい場合はゲームの HTML を iframe に埋め込んでください。実際、 Ebiten の Web サイトでは、各サンプルを iframe に埋め込んで実行しています。 Ebiten ゲームのブラウザ上実行はかなり重いので、ひとつの HTML ページに複数の Ebiten ゲームを iframe で埋め込むのは避けましょう。

実装

ほぼすべて Go です。 OpenGL の呼び出しなどはバインディングを使用しているため、 Ebiten 自体はほぼ cgo を使っていません。

デスクトップ版

ブラウザ版

GopherJS でコンパイルする際には js タグが使われるので、 Go ファイルの Build Constraints を使って、デスクトップ版とブラウザ版実装を分けています:

// GopherJS の時にコンパイルされるファイルの場合:
// +build js
// GopherJS の時にコンパイルされないファイルの場合:
// +build !js

例えば internal/opengl/context.go はデスクトップ用、 internal/opengl/context_js.go はブラウザ用の実装です。

その他使用したもの

  • go-bindata (バイナリを Go コード化するツール)

今後の予定

追記 (2017-05-16): 2017 年 5 月現在、以下の予定は全て完了しています。

  • ゲームパッド対応
  • モバイル Web 対応
    • 一応現在もブラウザ版として iOS 上で動くことを確認してはいるが、タップ入力はまだ
  • モバイルネイティブ対応
  • オーディオ周り
  • テキストレンダリング
  • ちゃんとした Windows 対応 (要望があれば)

名前の由来

エビの天ぷらはおいしいからです。

免責事項

この文章は私個人の見解を述べたものであり、私の所属している団体等とは一切の関係がありません。