これは何?
ゲームを作ろうとすると複数の画面(シーン)を遷移する必要がありますが、実際に管理部分を作っていると結構大変なのでパッケージにして使いやすくしてみました。
(下の例のように、同じ画面同士で遷移し合うような時に何も考えないと循環参照とかがめんどくさくて死ぬ)
コード
package main
import (
"image/color"
"log"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/krile136/sceneManager/game"
"github.com/krile136/sceneManager/game/effectType"
"github.com/krile136/sceneManager/game/effects"
)
func main() {
game := game.MakeGame(320, 240)
game.SetInitScene(&Top{})
game.AddScene(&Next{})
ebiten.SetWindowSize(640, 480)
ebiten.SetWindowTitle("Hello, SceneManager!")
if err := ebiten.RunGame(game); err != nil {
log.Fatal(err)
}
}
// Top Scence
type Top struct{}
func (t *Top) Init() error {
return nil
}
func (t *Top) Update() error {
if inpututil.IsKeyJustPressed(ebiten.KeyEnter) {
outSceneEffect := &effects.SceneEffect{
Type: effectType.CircularClosing,
Clr: color.RGBA{R: 24, G: 235, B: 249, A: 255},
Frame: 60,
}
inSceneEffect := &effects.SceneEffect{
Type: effectType.CircularOpening,
Clr: color.RGBA{R: 24, G: 235, B: 249, A: 255},
Frame: 60,
}
op := &game.TransitionOptions{
OutSceneEffect: *outSceneEffect,
InSceneEffect: *inSceneEffect,
}
game.Change("Next", op)
}
return nil
}
func (t *Top) Draw(screen *ebiten.Image) {
ebitenutil.DebugPrint(screen, "top!")
}
// Next Scene
type Next struct{}
func (n *Next) Init() error {
return nil
}
func (n *Next) Update() error {
if inpututil.IsKeyJustPressed(ebiten.KeyEnter) {
outSceneEffect := &effects.SceneEffect{
Type: effectType.FadeOut,
Clr: color.RGBA{R: 0, G: 0, B: 0, A: 255},
Frame: 30,
}
inSceneEffect := &effects.SceneEffect{
Type: effectType.FadeIn,
Clr: color.RGBA{R: 0, G: 0, B: 0, A: 255},
Frame: 30,
}
op := &game.TransitionOptions{
OutSceneEffect: *outSceneEffect,
InSceneEffect: *inSceneEffect,
}
game.Change("Top", op)
}
return nil
}
func (n *Next) Draw(screen *ebiten.Image) {
ebitenutil.DebugPrint(screen, "Next!")
}
動かすとどうなるの?
- Top画面からNext画面
- 画面の中央に向かって円が狭まっていき、切り替えと同時に円が広がってNext画面が開きます
- Next画面からTop画面
- フェードアウト/フェードインをして画面が切り替わります
リポジトリ
よかったらスター押していってね⭐️