Ebiten 2.2 リリースノート
v2.2.0
Nintendo Switch™
Nintendo Switch をサポートしました。詳しくは任天堂プラットフォーム開発者向けポータルサイト Nintendo Developer Portal をご覧ください。
オーディオ再実装
(#1549)
各プレイヤーが大きいバッファを持つように、オーディオの実装が改善されました。遅延やノイズが低減するはずです。
標準ゲームパッドマッピング
(#1557)
Ebiten v2.1 までは、 Ebiten のゲームパッドボタンや軸の割当は、ゲームパッドごと、または環境ごとに異なりました。たとえば、ゲームパッドボタン 1 は他の環境では違う物理ボタンを指すかもしれません。ゲームパッドを使うと、ポータビリティを維持するのが大変でした。
Ebiten v2.2 は Web 標準の標準ゲームパッドレイアウトを採用しました。標準ゲームパッドレイアウトは、 Xbox、 PlayStation、 Nintendo Switch といったモダンなゲームパッドのモデルです。標準ゲームパッドレイアウトは次のボタンや軸を仮定します:
- 2 つのスティック
- 4 つの左側のボタン (通常、方向キーや十字キー向け)
- 4 つの右側のボタン
- 4 つの前方のボタン
- 3 つの真ん中のボタン
もし使っているゲームパッドおよび環境で、標準ゲームパッドレイアウトが利用可能ならば、 StandardGamepadButton
のような標準ゲームパッド API が使えます。ボタンや軸の割当の違いを気にする必要がなくなります。
デスクトップでは SDL のゲームパッドデータベースが使われます。ブラウザでは、ブラウザの標準マッピングが使われます。モバイルでは、マッピングはまだ利用できません。
type ebiten.StandardGamepadAxis
type ebiten.StandardGamepadButton
ebiten.IsStandardGamepadButtonPressed
ebiten.IsStandardGamepadLayoutAvailable
ebiten.StandardGamepadAxisValue
ebiten.StandardGamepadButtonValue
ebiten.UpdateStandardGamepadLayoutMappings
残念ながら、すべてのゲームパッドが標準ゲームパッドレイアウトに対応しているとは限りません。サポートされてないゲームパッドに対しては、既存の API を使ってください。
実際の使用例については、 examples/gamepad
を参照してください。
ベクターグラフィック
(#1684)
Ebiten のベクターグラフィックス API は再設計され、ステンシルバッファを使うよう再実装されました。
ebiten.DrawTrianglesOptions
のメンバとして FillMode
が追加されました。フィルモードが ebiten.EvenOdd
は、重なった領域がどう描画されるかについてのルールで、 vector
パッケージの新関数 AppendVerticesAndIndicesForFilling
と組み合わせることで複雑な図形を描画できます。
vector
パッケージに次のような関数が追加されました:
実際の使用例については、 examples/vector
を参照してください。
macOS のネイティブフルスクリーン
(#1506)
macOS では、ウィンドウをフルスクリーンにするときに、新しい独立したスペースを作りそこにウィンドウをフィットさせる挙動になりました。
ウィンドウが閉じられるときのハンドリング
(#1574)
ウィンドウが閉じられるのを止めたり、ウィンドウが閉じられようとするタイミングで何かを行うことができるようになりました。
実際の使用例については、 examples/windowclosing
を参照してください。
静的なアプリケーションのための新しい vsync モード
(#1556)
Vsync のオン・オフに加えて、 Ebiten v2.2 では新しい vsync モード FPSModeVsyncOffMinimum
が利用できます。これはゲームは vsync には同期せず、入力が検知されたなど必要なタイミングのみで更新を行うモードです。静的なアプリケーションを実装するのに便利です。
Append*
関数
Ebiten のいくつかの関数は、呼び出しごとに新しいスライスを作っていました。関数呼び出しごとに新しいスライスを作るのは、メモリをアロケートするので非効率です。この問題を低減するため、スライスを受け取り新しい要素をそこに追加するような新しい関数が追加されました。これらは組み込み関数 append
のような動作をします。もしスライスに十分なキャパシティがあれば、その関数は新しいメモリをアロケートすることはありません。もし空スライスや nil が渡ってきたのなら、新しいスライスが作成されます。
ebiten.AppendGamepadIDs
ebiten.AppendInputChars
ebiten.AppendTouchIDs
inpututil.AppendJustConnectedGamepadIDs
inpututil.AppendJustPressedTouchIDs
inpututil.AppendPressedKeys
パフォーマンス改善
ReplacePixels
のメモリ使用量が改善されました (#1681)。- スケールのための色行列アロケーションが改善されました (#1658)。
- 色行列のアロケーションが減りました (#1796)。
- もう使われないピクセルデータについて、確実にメモリを解放するようにしました (#1803)。
その他の新しい関数
(*ebiten.Image).RGBA64At
(#1769)。(*audio.Context).NewPlayer
:audio.NewPlayer
を置き換えます (#1708)。(*audio.Context).NewPlayerFromBytes
:audioe.NewPlayerFromBytes
を置き換えます (#1708)。text.DrawWithOptions
(#1461)。
その他
- 定数
ebiten.SyncWithFPS
が追加されました。ebiten.UncappedTPS
の置き換えです (#1726)。 audio/mp3
,audio/vorbis
,audio/wav
パッケージで、Decode
関数とDecodeWithSampleRate
関数がio.ReadSeeker
の代わりにio.Reader
を取るようになりました (#1621)。- Kage で、
dfdx
やいくつかの関数が main ではない関数で使われているときにコンパイルできない問題を修正しました (#1701)。 - Linux および Unix のデバイススケールファクター値を修正しました (ありがとう、 divVerent さん!) (#1774).
v2.2.1
バグ修正
- Windows で、複数のスケールの異なるマルチモニタを使用したときに、画面のスケールが間違っていた問題の修正 (#1844)。
- Linux KDE で、画面が時々小さくなってしまっていた問題の修正 (#1847)。
v2.2.2
バグ修正
v2.2.3
バグ修正
- モニタが複数あるときにクラッシュすることがあった問題の修正 (#1878)。
- macOS で緑ボタンでフルスクリーンから戻したときに、画面が正しくリサイズされなかった問題の修正 (#1884)。
- macOS 12 Monterey で Vsync が動かなかった問題の修正 (#1885)。
v2.2.4
バグ修正
v2.2.5
バグ修正
- macOS で、起動時にウィンドウがサイズ可変で後から不可変になったときで、緑ボタンがアクティブのままなってしまう問題の修正 (#1987)。
v2.2.6
バグ修正
- 定数
ebiten.KeyKPAdd
が未定義になっていた問題の修正 (#2025)。