ebitenライブラリを使ってゲームの雛形?を作ってみました。
ebitenライブラリ
http://qiita.com/hajimehoshi/items/d531f0c0e3f5ec5287c3
ソースコードはこちら
シューティングゲーム
https://github.com/ikuo0/game/tree/master/ebiten_stg
ebiten_stg_release.zip がWindows用バイナリです
アクションゲーム
https://github.com/ikuo0/game/tree/master/ebiten_act
ebiten_act_release.zip がWindows用バイナリです
ebiten_stg、ebiten_act について
使えるところがあれば自由にコピペして使って頂いて構いません、質問やバグ等についてはコメント欄からどうぞ。
基本的にWindowsでしか開発を行っていませんので内容はWindows版のお話になります。
ebitenライブラリでゲームを作る際の注意点とか
基本的な使い方
https://hajimehoshi.github.io/ebiten/
公式のサンプルで一通りのことやってますのでまずはサンプルを一通り動かして関数を把握しましょう
画像はgimpで作ろう
Windowsペイント、フリーの画像ビューア(VIX)で透過色PNGを作成した所画像の読み込み処理でエラーとなり読み込めませんでした
gimpで作成し透過色指定してエクスポートした物を素材として使用しましょう
SE・BGMの サンプリングレートは一定、ステレオ形式で
サンプリングレートの異なるWAV、OGGを混在させることはできません、モノラルのWAVは再生できません、
ということなのでゲーム素材のWAV、OGGはサンプリングレートを統一し、全部ステレオ音源で準備しましょう
参考までに私はSoundEngine Freeを使用して音源を加工しました。
SE・BGM再生時に audio.Context のインスタンスはプログラム全体で一つだけ
ebiten のSE、BGMの再生は audio.Context を作成し毎フレーム audio.Context.Update を呼ぶことで再生されます。
audio.Context のインスタンスは複数作ってはいけません、プログラム全体で一つだけです。
複数作って実行してもとりあえず音は出るのですが公式で一つにしてと書いてあるのでそうしましょう
初期化処理について
リソース周りの初期化についてですが音声の初期化は ebiten.Run の前でも可能、ジョイパッドの初期設定は ebiten.Run の中で行わないと機能しません
- 例
音声周りの初期化を ebiten.Run の前に行う
https://github.com/ikuo0/game/blob/master/ebiten_act/main.go
sound.Initialize(global.SampleRate, 20, 20)
ジョイパッドの初期化(カウント)を ebiten.Run の中で行う
https://github.com/ikuo0/game/blob/master/ebiten_act/main.go
ginput.Initialize()
ジョイパッドのカウンタが無いので自分でカウントしましょう
ジョイパッドの数をカウントする関数(GedPadNum()みたいな)物が無いので下記のようなコードを作って自分でカウントしましょう
func PadCount() (int) {
res := 0
for i := 0; i < 16; i++ {
if cnt := ebiten.GamepadButtonNum(i); cnt < 1 {
break
} else {
res++
}
}
return res
}
仮想環境Linuxでも動きました
25フレーム程度しか出ませんでしたがWindows上のLinux仮想環境で動作しました、仮想環境で動かした時の環境メモを記します
仮想マシン: VirtualBox
ホスト: Windows10
ゲスト: ubuntu 16
golang 1.7以上をソースからインストール、ubuntu16はgolang1.6であったためgo言語をソースからインストールする必要がありました
下記URLを参考にして必要なライブラリをインストールする
https://github.com/hajimehoshi/ebiten/wiki/Linux
不具合とか
知り合いに配って試験してもらいました、Radeonで3年ほど前(2013年)のドライバ使ってる方が表示不具合ありましたが、それ以外の環境では問題なく動いています
もし表示おかしい場合は環境の確認をしましょう。
他になにかあればまた追記編集していきます。
ebiten作者のHoshiさんに感謝です、go言語でゲーム作れるの楽しいです。