Adding upstream version 0.0~git20250520.a1d9079+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
590ac7ff5f
commit
20149b7f3a
456 changed files with 70406 additions and 0 deletions
98
example/flappy/main.go
Normal file
98
example/flappy/main.go
Normal file
|
@ -0,0 +1,98 @@
|
|||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build darwin || linux
|
||||
|
||||
// Flappy Gopher is a simple one-button game that uses the
|
||||
// mobile framework and the experimental sprite engine.
|
||||
package main
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"golang.org/x/mobile/app"
|
||||
"golang.org/x/mobile/event/key"
|
||||
"golang.org/x/mobile/event/lifecycle"
|
||||
"golang.org/x/mobile/event/paint"
|
||||
"golang.org/x/mobile/event/size"
|
||||
"golang.org/x/mobile/event/touch"
|
||||
"golang.org/x/mobile/exp/gl/glutil"
|
||||
"golang.org/x/mobile/exp/sprite"
|
||||
"golang.org/x/mobile/exp/sprite/clock"
|
||||
"golang.org/x/mobile/exp/sprite/glsprite"
|
||||
"golang.org/x/mobile/gl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
|
||||
app.Main(func(a app.App) {
|
||||
var glctx gl.Context
|
||||
var sz size.Event
|
||||
for e := range a.Events() {
|
||||
switch e := a.Filter(e).(type) {
|
||||
case lifecycle.Event:
|
||||
switch e.Crosses(lifecycle.StageVisible) {
|
||||
case lifecycle.CrossOn:
|
||||
glctx, _ = e.DrawContext.(gl.Context)
|
||||
onStart(glctx)
|
||||
a.Send(paint.Event{})
|
||||
case lifecycle.CrossOff:
|
||||
onStop()
|
||||
glctx = nil
|
||||
}
|
||||
case size.Event:
|
||||
sz = e
|
||||
case paint.Event:
|
||||
if glctx == nil || e.External {
|
||||
continue
|
||||
}
|
||||
onPaint(glctx, sz)
|
||||
a.Publish()
|
||||
a.Send(paint.Event{}) // keep animating
|
||||
case touch.Event:
|
||||
if down := e.Type == touch.TypeBegin; down || e.Type == touch.TypeEnd {
|
||||
game.Press(down)
|
||||
}
|
||||
case key.Event:
|
||||
if e.Code != key.CodeSpacebar {
|
||||
break
|
||||
}
|
||||
if down := e.Direction == key.DirPress; down || e.Direction == key.DirRelease {
|
||||
game.Press(down)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
var (
|
||||
startTime = time.Now()
|
||||
images *glutil.Images
|
||||
eng sprite.Engine
|
||||
scene *sprite.Node
|
||||
game *Game
|
||||
)
|
||||
|
||||
func onStart(glctx gl.Context) {
|
||||
images = glutil.NewImages(glctx)
|
||||
eng = glsprite.Engine(images)
|
||||
game = NewGame()
|
||||
scene = game.Scene(eng)
|
||||
}
|
||||
|
||||
func onStop() {
|
||||
eng.Release()
|
||||
images.Release()
|
||||
game = nil
|
||||
}
|
||||
|
||||
func onPaint(glctx gl.Context, sz size.Event) {
|
||||
glctx.ClearColor(1, 1, 1, 1)
|
||||
glctx.Clear(gl.COLOR_BUFFER_BIT)
|
||||
now := clock.Time(time.Since(startTime) * 60 / time.Second)
|
||||
game.Update(now)
|
||||
eng.Render(scene, now, sz)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue