// RunWithoutMainLoop runs the game, but don't call the loop on the main (UI) thread. // Different from Run, this function returns immediately. // // Typically, Ebiten users don't have to call this directly. // Instead, functions in github.com/hajimehoshi/ebiten/mobile module call this. // // The size unit is device-independent pixel. func RunWithoutMainLoop(f func(*Image) error, width, height int, scale float64, title string) <-chan error { ch := make(chan error) go func() { g := newGraphicsContext(f) theGraphicsContext.Store(g) if err := loop.Run(g, width, height, scale, title, FPS); err != nil { ch <- err } close(ch) }() return ch }
// Run runs the game. // f is a function which is called at every frame. // The argument (*Image) is the render target that represents the screen. // // This function must be called from the main thread. // Note that ebiten bounds the main goroutine to the main OS thread by runtime.LockOSThread. // // The given function f is guaranteed to be called 60 times a second // even if a rendering frame is skipped. // f is not called when the screen is not shown. // // The size unit is device-independent pixel. func Run(f func(*Image) error, width, height int, scale float64, title string) error { ch := make(chan error) go func() { g := newGraphicsContext(f) theGraphicsContext.Store(g) if err := loop.Run(g, width, height, scale, title, FPS); err != nil { ch <- err } close(ch) }() // TODO: Use context in Go 1.7? if err := ui.RunMainThreadLoop(ch); err != nil { return err } return nil }