Ebiten 2.2 Release Notes
v2.2.0
Nintendo Switch™
Ebiten now supports Nintendo Switch. For more information, please see Nintendo Developer Portal, the portal site for Nintendo platform developers.
Audio reimplementation
(#1549)
The audio implementaiton was much improved to have a bigger buffer for each player. Delays and noises should be reduced.
Standard gamepad layout mappings
(#1557)
Until v2.1, Ebiten's gamepad button and axis assignments varied among gamepads and environments. For example, a gamepad button number 1 might indicate a different physical button in another environment. It was hard to keep poratbility with gamepads.
Ebiten v2.2 adopted the standard gamepad layout in the Web standard. The standard gamepad layout is a model for modern gamepads like Xbox, PlayStation and Nintendo Switch. The standard gamepad layout assumes these buttons or axes:
- Two sticks
- Four buttons on the left hand (usually for arrows or D-pad)
- Four buttons on the right hand
- Four buttons on the front
- Three buttons on the center
If the standard gamepad layout is available for your gamepad in your environment, you can use APIs for standard gamepads like StandardGamepadButton
. You don't have to worry about the button/axis assignment differences.
On desktops, SDL's gamepad database is used. On browsers, browsers' standard mappings are used. On mobiles, mappings are not available yet.
type ebiten.StandardGamepadAxis
type ebiten.StandardGamepadButton
ebiten.IsStandardGamepadButtonPressed
ebiten.IsStandardGamepadLayoutAvailable
ebiten.StandardGamepadAxisValue
ebiten.StandardGamepadButtonValue
ebiten.UpdateStandardGamepadLayoutMappings
Unfortunately, not all gamepads have mappings for the standard gamepad layout. Use the existing APIs for unsupported gamepads.
For actual usages, see examples/gamepad
.
New vector graphics APIs
(#1684)
Vector graphics APIs in Ebiten were redesigned and reimplemented with stencil buffers.
A member FillMode
is added to ebiten.DrawTrianglesOptions
. The fill mode ebiten.EvenOdd
indicates a rule how an overlapped region is rendered. By combining this and a new function AppendVerticesAndIndicesForFilling
in vector
package, you can render complex shapes.
These APIs are added to vector
package:
For actual usages, see examples/vector
.
macOS's native fullscreen
(#1506)
On macOS, now fullscreening a window creates a new independent space and resizes the window to fit with the space.
Handling window-closing
(#1574)
You can prevent the window from being closed and do something when the window is being closed.
For actual usages, see examples/windowclosing
.
New vsync mode for static applications
(#1556)
In addition to vsync on and vsync off, Ebiten v2.2 added a new mode: FPSModeVsyncOffMinimum
. This indicates that the game doesn't sync with vsync, and the game is updated only when necessary like an input is detected. This is useful for a static application.
Append*
functions
There are some Ebiten functions that return a new slice for each call. Creating a new slice for each call allocates memory and is not efficient. To mitigate this issue, new functions were added to accept a slice and append new elements. These work like the built-in function append
. If the given slice has enough capacity, the functions don't allocate memory. If the given slice is empty or nil, a new slice is created.
ebiten.AppendGamepadIDs
ebiten.AppendInputChars
ebiten.AppendTouchIDs
inpututil.AppendJustConnectedGamepadIDs
inpututil.AppendJustPressedTouchIDs
inpututil.AppendPressedKeys
Performance improvements
- Memory usage at
ReplacePixels
was improved (#1681). - Allocating color matrices for scaling was improved (#1658).
- Reduced allocations of color matrix values (#1796).
- Ensured to free memory for image pixels soon after they were no longer used (#1803).
Other new functions
(*ebiten.Image).RGBA64At
(#1769).(*audio.Context).NewPlayer
: replacesaudio.NewPlayer
(#1708).(*audio.Context).NewPlayerFromBytes
: replacesaudio.NewPlayerFromBytes
(#1708).text.DrawWithOptions
(#1461).
Others
- A constant
ebiten.SyncWithFPS
was added to replaceebiten.UncappedTPS
(#1726). - In
audio/mp3
,audio/vorbis
,audio/wav
packages,Decode
andDecodeWithSampleRate
now takesio.Reader
instead ofio.ReadSeeker
(#1621). - Fixed an issue that
dfdx
and some functions in non-main function failed to compile in Kage (#1701). - Fixed the device scale factor on Linux and Unix desktops (Thank you, divVerent!) (#1774).
v2.2.1
Bug fix
- The screen was scaled wrongly with multiple and various scaling monitors on Windows (#1844).
- The screen was sometimes too small on Linux KDE (#1847).
v2.2.2
Bug fix
- Crashed on pressing the green button of a transparent window on macOS (#1857).
- Unexpected memory allocations happened (#1860).
v2.2.3
Bug fix
- Crash with multiple monitors (#1878).
- The screen was not resized correcly when restoring from fullscreen by the green button on macOS (#1884).
- Vsync didn't work on macOS 12 Monterey (#1885).
v2.2.4
Bug fix
v2.2.5
Bug fix
- On macOS, the green button kept active unexpectedly when the window was resizable at startup and unresizable later (#1987).
v2.2.6
Bug fix
- The constant
ebiten.KeyKPAdd
was missing (#2025).
v2.2.7
Bug fix
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)。
v2.2.7
バグ修正
Ebiten 2.2 发布日志
v2.2.0
任天堂 Switch™
Ebiten现已支持任天堂Switch游戏机. 更多内容请至 任天堂平台开发主页.
音频播放
(#1549)
The audio implementaiton was much improved to have a bigger buffer for each player. Delays and noises should be reduced.
标准手柄布局映射
(#1557)
Until v2.1, Ebiten's gamepad button and axis assignments varied among gamepads and environments. For example, a gamepad button number 1 might indicate a different physical button in another environment. It was hard to keep poratbility with gamepads.
Ebiten v2.2 adopted the standard gamepad layout in the Web standard. The standard gamepad layout is a model for modern gamepads like Xbox, PlayStation and Nintendo Switch. The standard gamepad layout assumes these buttons or axes:
- Two sticks
- Four buttons on the left hand (usually for arrows or D-pad)
- Four buttons on the right hand
- Four buttons on the front
- Three buttons on the center
If the standard gamepad layout is available for your gamepad in your environment, you can use APIs for standard gamepads like StandardGamepadButton
. You don't have to worry about the button/axis assignment differences.
On desktops, SDL's gamepad database is used. On browsers, browsers' standard mappings are used. On mobiles, mappings are not available yet.
type ebiten.StandardGamepadAxis
type ebiten.StandardGamepadButton
ebiten.IsStandardGamepadButtonPressed
ebiten.IsStandardGamepadLayoutAvailable
ebiten.StandardGamepadAxisValue
ebiten.StandardGamepadButtonValue
ebiten.UpdateStandardGamepadLayoutMappings
Unfortunately, not all gamepads have mappings for the standard gamepad layout. Use the existing APIs for unsupported gamepads.
For actual usages, see examples/gamepad
.
新的矢量图形API
(#1684)
Vector graphics APIs in Ebiten were redesigned and reimplemented with stencil buffers.
A member FillMode
is added to ebiten.DrawTrianglesOptions
. The fill mode ebiten.EvenOdd
indicates a rule how an overlapped region is rendered. By combining this and a new function AppendVerticesAndIndicesForFilling
in vector
package, you can render complex shapes.
These APIs are added to vector
package:
For actual usages, see examples/vector
.
MacOS原生全屏
(#1506)
On macOS, now fullscreening a window creates a new independent space and resizes the window to fit with the space.
处理窗口关闭事件
(#1574)
You can prevent the window from being closed and do something when the window is being closed.
For actual usages, see examples/windowclosing
.
新的用于静态程序的垂直同步模式
(#1556)
In addition to vsync on and vsync off, Ebiten v2.2 added a new mode: FPSModeVsyncOffMinimum
. This indicates that the game doesn't sync with vsync, and the game is updated only when necessary like an input is detected. This is useful for a static application.
Append*
functions
There are some Ebiten functions that return a new slice for each call. Creating a new slice for each call allocates memory and is not efficient. To mitigate this issue, new functions were added to accept a slice and append new elements. These work like the built-in function append
. If the given slice has enough capacity, the functions don't allocate memory. If the given slice is empty or nil, a new slice is created.
ebiten.AppendGamepadIDs
ebiten.AppendInputChars
ebiten.AppendTouchIDs
inpututil.AppendJustConnectedGamepadIDs
inpututil.AppendJustPressedTouchIDs
inpututil.AppendPressedKeys
性能改进
- Memory usage at
ReplacePixels
was improved (#1681). - Allocating color matrices for scaling was improved (#1658).
- Reduced allocations of color matrix values (#1796).
- Ensured to free memory for image pixels soon after they were no longer used (#1803).
新的函数
(*ebiten.Image).RGBA64At
(#1769).(*audio.Context).NewPlayer
: replacesaudio.NewPlayer
(#1708).(*audio.Context).NewPlayerFromBytes
: replacesaudio.NewPlayerFromBytes
(#1708).text.DrawWithOptions
(#1461).
其他
- A constant
ebiten.SyncWithFPS
was added to replaceebiten.UncappedTPS
(#1726). - In
audio/mp3
,audio/vorbis
,audio/wav
packages,Decode
andDecodeWithSampleRate
now takesio.Reader
instead ofio.ReadSeeker
(#1621). - Fixed an issue that
dfdx
and some functions in non-main function failed to compile in Kage (#1701). - Fixed the device scale factor on Linux and Unix desktops (Thank you, divVerent!) (#1774).
v2.2.1
Bug修复
- The screen was scaled wrongly with multiple and various scaling monitors on Windows (#1844).
- 在KDE桌面上窗口有时过小 (#1847).
v2.2.2
Bug修复
v2.2.3
Bug修复
v2.2.4
Bug修复
v2.2.5
Bug修复
- 在macOS, 修正窗口在启动时可以调整大小但启动后禁用调整大小后绿色按钮仍可用的Bug(#1987)。
v2.2.6
Bug修复
- 常量
ebiten.KeyKPAdd
丢失(#2025).