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 を使っていません。
デスクトップ版
- GLFW3 (Go バインディングとして go-gl/glfw3)
- OpenGL (Go バインディングとして go-gl/gl) と GLSL
ブラウザ版
- GopherJS
- WebGL (GopherJS の WebGL バインディング) と GLSL
GopherJS でコンパイルする際には js
タグが使われるので、 Go ファイルの Build Constraints を使って、デスクトップ版とブラウザ版実装を分けています:
// GopherJS の時にコンパイルされるファイルの場合:
// +build js
// GopherJS の時にコンパイルされないファイルの場合:
// +build !js
例えば internal/opengl/context_desktop.go はデスクトップ用、 internal/opengl/context_js.go はブラウザ用の実装です。
その他使用したもの
- go-bindata (バイナリを Go コード化するツール)
今後の予定
追記 (2017-05-16): 2017 年 5 月現在、以下の予定は全て完了しています。
- ゲームパッド対応
- モバイル Web 対応
- 一応現在もブラウザ版として iOS 上で動くことを確認してはいるが、タップ入力はまだ
- モバイルネイティブ対応
- オーディオ周り
- audio ブランチで開発中
- テキストレンダリング
- ちゃんとした Windows 対応 (要望があれば)
名前の由来
エビの天ぷらはおいしいからです。
免責事項
この文章は私個人の見解を述べたものであり、私の所属している団体等とは一切の関係がありません。