 |
|
10
lesismal Aug 10, 2021
### 一般写法,工厂方法
```golang package main
type GameStart struct { cloudNumber int gameStartLayers [8]*ebiten.Image layerPosition [8][2]float64 menuList [3]*Menu }
func NewGameStart() *GameStart { return &GameStart{ cloudNumber: 3, layerPosition: [8][2]float64{ {0, 0}, {0, 0}, {0, 230}, {0, 250}, {0, 250}, {0, 0}, {0, 0}, {0, 0}, }, } }
func main() { var gameStart = NewGameStart() } ```
### 如果需要 pool 优化,还可以: ```golang package main
import ( "sync" )
var initedGameStart = GameStart{ cloudNumber: 3, layerPosition: [8][2]float64{ {0, 0}, {0, 0}, {0, 230}, {0, 250}, {0, 250}, {0, 0}, {0, 0}, {0, 0}, }, }
var gameStartPool = sync.Pool{ New: func() interface{} { return &GameStart{} }, }
type GameStart struct { cloudNumber int gameStartLayers [8]*ebiten.Image layerPosition [8][2]float64 menuList [3]*Menu }
func (v *GameStart) Release() { // maybe you want to release gameStartLayers and menuList here // ...
gameStartPool.Put(v) }
func NewGameStart() *GameStart { v := gameStartPool.Get().(*GameStart) *v = initedGameStart return v }
func main() { var gameStart = NewGameStart() defer gameStart.Release() } ```
|