Ebitengine v2 移行ガイド

概要

Ebitengine v2 は v1 からのメジャーバージョンアップデートです。 API に関して破壊的変更を伴います。そのため v2 への移行はプログラムの修正が必要です。

このドキュメントでは、 v2 移行の際に実際にやらなければならないことを列挙します。

v2 には過激な変更を入れるのではなく、代わりにおとなしめの変更が入ります。

プラットフォーム

やることリスト

インポートパスの更新

import 内の github.com/hajimehoshi/ebiten をすべて github.com/hajimehoshi/ebiten/v2 に更新します。 github.com/hajimehoshi/ebiten/textgithub.com/hajimehoshi/ebiten/v2/text になります。

最後に go mod tidy コマンドを実行します。 go.modgithub.com/hajimehoshi/ebiten/v2 が含まれるようになり、 github.com/hajimehoshi/ebiten が消えるはずです。

Ebitengine v1 と v2 は 1 つのアプリケーションに混ぜて使用することが出来ません。 go mod tidy を実行したあとにも関わらず go.mod で両方記述されてしまっている場合は、依存関係を確認して v1 の依存を消してください。ただし複数のアプリケーションを 1 つのモジュールで意図的に管理するような場合は、その限りではありません。

API の更新

github.com/hajimehoshi/ebiten

次の型が導入されます。

次の API のシグニチャが変更されます。

v1v2
func GamepadAxisNum(id int, axis int) intfunc GamepadAxisNum(id GamepadID, axis int) int
func GamepadAxisNum(id int) intfunc GamepadAxisNum(id GamepadID) int
func GamepadButtonNum(id int) intfunc GamepadButtonNum(id GamepadID) int
func GamepadIDs() []intfunc GamepadIDs() []GamepadID
func GamepadName(id int) stringfunc GamepadName(id GamepadID) string
func GamepadSDLID(id int) stringfunc GamepadSDLID(id GamepadID) string
func (*Image).Clear() errorfunc (*Image).Clear()
func (*Image).Dispose() errorfunc (*Image).Dispose()
func (*Image).DrawImage(img *Image, options *DrawImageOptions) errorfunc (*Image).DrawImage(img *Image, options *DrawImageOptions)
func (*Image).Fill(clr color.Color) errorfunc (*Image).Fill(clr color.Color)
func (*Image).ReplacePixels(pixels []byte) errorfunc (*Image).ReplacePixels(pixels []byte)
func IsGamepadButtonPressed(id int, button GamepadButton) boolfunc IsGamepadButtonPressed(id GamepadID, button GamepadButton) bool
func NewImage(width, height int, filter Filter) (*Image, error)func NewImage(width, height int) *Image
func NewImageFromImage(source image.Image, filter Filter) (*Image, error)func NewImageFromImage(source image.Image) *Image
func TouchIDs() []intfunc TouchIDs() []TouchID
func TouchPosition(id int) (int, int)func TouchPosition(id TouchID) (int, int)

次の API が削除されるか置き換えられます。

v1v2
const FilterDefault(置き換え先なし)
const FPS(置き換え先なし)
const MaxImageSize(置き換え先なし)
DrawImageOptions 構造体の ImagePartsfunc (*Image).SubImage
DrawImageOptions 構造体の Partsfunc (*Image).SubImage
DrawImageOptions 構造体の SourceRectfunc (*Image).SubImage
interface Touchfunc TouchPosition
func (*ColorM).Add(置き換え先なし)
func (*GeoM).Add(置き換え先なし)
func IsCursorVisiblefunc CursorMode
func IsDrawingSkippedRunGame 関数と Game インターフェイスの Draw
func IsRunningInBackgroundfunc IsRunnableOnUnfocused
func IsRunningSlowlyRunGame 関数と Game インターフェイスの Draw
func MonitorSizefunc ScreenSizeInFullscreen
func Monochrome(*ColorM).ChangeHSV 関数 (引数は 0, 0, 1)
func RotateGeofunc (*GeoM).Rotate
func RotateHuefunc (*ColorM).RotateHue
func Runfunc RunGame
func ScaleColorfunc (*ColorM).Scale
func ScaleGeofunc (*GeoM).Scale
func ScreenScalefunc WindowSize
func SetCursorVisiblefunc SetCursorMode
func SetCursorVisibilityfunc SetCursorMode
func SetRunningInBackgroundfunc SetRunnableOnUnfocused
func SetScreenScaleRunGame 関数と Game インターフェイスの Layout
func SetScreenSizeRunGame 関数と Game インターフェイスの Layout
func Touchesfunc TouchIDs
func TranslateColorfunc (*ColorM).Translate
func TranslateGeofunc (*GeoM).Translate

github.com/hajimehoshi/ebiten/audio

次の API のシグニチャが変更されます。

v1v2
func NewContext(sampleRate int) (*Context, error)func NewContext(sampleRate int) *Context
func NewInfiniteLoop(src ReadSeekCloser, length int64) *InfiniteLoopfunc NewInfiniteLoop(src io.ReadSeeker, length int64) *InfiniteLoop
func NewInfiniteLoopWithIntro(src ReadSeekCloser, introLength int64, loopLength int64) *InfiniteLoopfunc NewInfiniteLoopWithIntro(src io.ReadSeeker, introLength int64, loopLength int64) *InfiniteLoop
func NewPlayer(context *Context, src io.ReadCloser) (*Player, error)func NewPlayer(context *Context, src io.Reader) (*Player, error)
func NewPlayerFromBytes(context *Context, src []byte) (*Player, error)func NewPlayerFromBytes(context *Context, src []byte) *Player
func (*Player).Pause() errorfunc (*Player).Pause()
func (*Player).Play() errorfunc (*Player).Play()

次の API が削除されるか置き換えられます。

v1v2
BytesReadSeekCloser(置き換え先はないが、大抵の場合 bytes.NewReader で事足りる)
func (*Context).Update(置き換え先なし)
ReadSeekCloser(置き換え先はないが、大抵の場合 io.ReadSeeker で事足りる)

github.com/hajimehoshi/ebiten/audio/mp3

次の API のシグニチャが変更されます。

v1v2
func Decode(context *audio.Context, src audio.ReadSeekCloser) (*Stream, error)func Decode(context *audio.Context, src io.ReadSeeker) (*Stream, error)

次の API が削除されるか置き換えられます。

v1v2
func (*Stream).Close(置き換え先なし)
func (*Stream).Sizefunc (*Stream).Length

github.com/hajimehoshi/ebiten/audio/vorbis

次の API のシグニチャが変更されます。

v1v2
func Decode(context *audio.Context, src audio.ReadSeekCloser) (*Stream, error)func Decode(context *audio.Context, src io.ReadSeeker) (*Stream, error)

次の API が削除されるか置き換えられます。

v1v2
func (*Stream).Close(置き換え先なし)
func (*Stream).Sizefunc (*Stream).Length

github.com/hajimehoshi/ebiten/audio/wav

次の API のシグニチャが変更されます。

v1v2
func Decode(context *audio.Context, src audio.ReadSeekCloser) (*Stream, error)func Decode(context *audio.Context, src io.ReadSeeker) (*Stream, error)

次の API が削除されるか置き換えられます。

v1v2
func (*Stream).Close(置き換え先なし)
func (*Stream).Sizefunc (*Stream).Length

github.com/hajimehoshi/ebiten/ebitenutil

次の API のシグニチャが変更されます。

v1v2
func DebugPrint(image *ebiten.Image, str string) errorfunc DebugPrint(image *ebiten.Image, str string)

github.com/hajimehoshi/ebiten/inpututil

次の API のシグニチャが変更されます。

v1v2
func GamepadButtonPressDuration(id int, button ebiten.GamepadButton) intfunc GamepadButtonPressDuration(id ebiten.GamepadID, button ebiten.GamepadButton) int
func IsGamepadButtonJustPressed(id int, button ebiten.GamepadButton) boolfunc IsGamepadButtonJustPressed(id ebiten.GamepadID, button ebiten.GamepadButton) bool
func IsGamepadButtonJustReleased(id int, button ebiten.GamepadButton) boolfunc IsGamepadButtonJustReleased(id ebiten.GamepadID, button ebiten.GamepadButton) bool
func IsGamepadJustDisconnected(id int) boolfunc IsGamepadJustDisconnected(id ebiten.GamepadID) bool
func IsTouchJustReleased(id int) boolfunc IsTouchJustReleased(id ebiten.TouchID) bool
func JustConnectedGamepadIDs() []intfunc JustConnectedGamepadIDs() []ebiten.GamepadID
func JustPressedTouchIDs() []intfunc JustPressedTouchIDs() []ebiten.TouchID
func TouchPressDuration(id int) intfunc TouchPressDuration(id ebiten.TouchID) int

github.com/hajimehoshi/ebiten/mobile

次の API が削除されるか置き換えられます。

v1v2
interface GameebitenGame インターフェイス
func Startebitenmobile コマンドと SetGame 関数
func Updateebitenmobile コマンドと SetGame 関数
func UpdateTouchesOnAndroidebitenmobile コマンド
func UpdateTouchesOnIOSebitenmobile コマンド