2021SC@SDUSC
Go语言的简单2D游戏库-Ebiten
目录
代码
package thread
import (
"errors"
)
type Thread interface {
Call(func() error) error
Loop()
}
type OSThread struct {
funcs chan func() error
results chan error
}
func NewOSThread() *OSThread {
return &OSThread{
funcs: make(chan func() error),
results: make(chan error),
}
}
var BreakLoop = errors.New("break loop")
func (t *OSThread) Loop() {
for f := range t.funcs {
err := f()
if err == BreakLoop {
t.results <- nil
return
}
t.results <- err
}
}
func (t *OSThread) Call(f func() error) error {
t.funcs <- f
return <-t.results
}
type NoopThread struct{}
func NewNoopThread() *NoopThread {
return &NoopThread{}
}
func (t *NoopThread) Loop() {}
func (t *NoopThread) Call(f func() error) error {
return f()
}
Variables
var BreakLoop = errors.New(“break loop”)
BreakLoop表示循环的终止。
Types
type NoopThread
type NoopThread struct{}
NoopThread用于禁用线程。
func NewNoopThread
func NewNoopThread()*NoopThread
NewNoopThread创建一个不执行线程的新线程。
func(*NoopThread)Call
func (t *NoopThread) Call(f func() error) error
调用会立即执行func
func (*NoopThread) Loop
func (t *NoopThread) Loop()
循环不起任何作用
type OSThread
type OSThread struct {
// contains filtered or unexported fields
}
OSThread表示一个OS线程。
func NewOSThread
func NewOSThread() *OSThread
NewOSThread创建一个新线程。
假设操作系统线程是由运行时固定的。调用NewOSThread时使用LockOSThread。
func (*OSThread) Call
func (t *OSThread) Call(f func() error) error
在线程上调用f。不要从同一线程调用它。这将永远阻塞。如果f返回BreakLoop,则循环返回。
如果未调用循环,则调用块。
func (*OSThread) Loop
func (t *OSThread) Loop()
循环启动线程循环,直到发布的函数返回BreakLoop。
必须在线程上调用循环。
type Thread
type Thread interface {
Call(func() error) error
Loop()
}
线程在Ebiten中定义线程行为。