mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-04 23:14:28 +01:00
parent
a1e65a5e90
commit
b71fa0b59b
@ -54,10 +54,6 @@ func init() {
|
|||||||
bgImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault)
|
bgImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
|
||||||
theViewport = &viewport{}
|
|
||||||
)
|
|
||||||
|
|
||||||
type viewport struct {
|
type viewport struct {
|
||||||
x16 int
|
x16 int
|
||||||
y16 int
|
y16 int
|
||||||
@ -78,14 +74,17 @@ func (p *viewport) Position() (int, int) {
|
|||||||
return p.x16, p.y16
|
return p.x16, p.y16
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(screen *ebiten.Image) error {
|
type Game struct {
|
||||||
theViewport.Move()
|
viewport viewport
|
||||||
|
}
|
||||||
|
|
||||||
if ebiten.IsDrawingSkipped() {
|
func (g *Game) Update(screen *ebiten.Image) error {
|
||||||
|
g.viewport.Move()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
x16, y16 := theViewport.Position()
|
func (g *Game) Draw(screen *ebiten.Image) {
|
||||||
|
x16, y16 := g.viewport.Position()
|
||||||
offsetX, offsetY := float64(-x16)/16, float64(-y16)/16
|
offsetX, offsetY := float64(-x16)/16, float64(-y16)/16
|
||||||
|
|
||||||
// Draw bgImage on the screen repeatedly.
|
// Draw bgImage on the screen repeatedly.
|
||||||
@ -101,11 +100,16 @@ func update(screen *ebiten.Image) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()))
|
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()))
|
||||||
return nil
|
}
|
||||||
|
|
||||||
|
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
|
||||||
|
return screenWidth, screenHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Infinite Scroll (Ebiten Demo)"); err != nil {
|
ebiten.SetWindowSize(screenWidth*2, screenHeight*2)
|
||||||
|
ebiten.SetWindowTitle("Infinite Scroll (Ebiten Demo)")
|
||||||
|
if err := ebiten.RunGame(&Game{}); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,18 +45,21 @@ func init() {
|
|||||||
keyboardImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault)
|
keyboardImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(screen *ebiten.Image) error {
|
type Game struct {
|
||||||
var pressed []ebiten.Key
|
pressed []ebiten.Key
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *Game) Update(screen *ebiten.Image) error {
|
||||||
|
g.pressed = nil
|
||||||
for k := ebiten.Key(0); k <= ebiten.KeyMax; k++ {
|
for k := ebiten.Key(0); k <= ebiten.KeyMax; k++ {
|
||||||
if ebiten.IsKeyPressed(k) {
|
if ebiten.IsKeyPressed(k) {
|
||||||
pressed = append(pressed, k)
|
g.pressed = append(g.pressed, k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ebiten.IsDrawingSkipped() {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *Game) Draw(screen *ebiten.Image) {
|
||||||
const (
|
const (
|
||||||
offsetX = 24
|
offsetX = 24
|
||||||
offsetY = 40
|
offsetY = 40
|
||||||
@ -70,7 +73,7 @@ func update(screen *ebiten.Image) error {
|
|||||||
|
|
||||||
// Draw the highlighted keys.
|
// Draw the highlighted keys.
|
||||||
op = &ebiten.DrawImageOptions{}
|
op = &ebiten.DrawImageOptions{}
|
||||||
for _, p := range pressed {
|
for _, p := range g.pressed {
|
||||||
op.GeoM.Reset()
|
op.GeoM.Reset()
|
||||||
r, ok := keyboard.KeyRect(p)
|
r, ok := keyboard.KeyRect(p)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -82,16 +85,20 @@ func update(screen *ebiten.Image) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
keyStrs := []string{}
|
keyStrs := []string{}
|
||||||
for _, p := range pressed {
|
for _, p := range g.pressed {
|
||||||
keyStrs = append(keyStrs, p.String())
|
keyStrs = append(keyStrs, p.String())
|
||||||
}
|
}
|
||||||
ebitenutil.DebugPrint(screen, strings.Join(keyStrs, ", "))
|
ebitenutil.DebugPrint(screen, strings.Join(keyStrs, ", "))
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
|
||||||
|
return screenWidth, screenHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Keyboard (Ebiten Demo)"); err != nil {
|
ebiten.SetWindowSize(screenWidth*2, screenHeight*2)
|
||||||
|
ebiten.SetWindowTitle("Keyboard (Ebiten Demo)")
|
||||||
|
if err := ebiten.RunGame(&Game{}); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,10 @@ import (
|
|||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
}
|
||||||
|
|
||||||
// World represents the game state.
|
// World represents the game state.
|
||||||
type World struct {
|
type World struct {
|
||||||
area []bool
|
area []bool
|
||||||
@ -51,11 +55,6 @@ func NewWorld(width, height int, maxInitLiveCells int) *World {
|
|||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
|
||||||
rand.Seed(time.Now().UnixNano())
|
|
||||||
world = NewWorld(screenWidth, screenHeight, int((screenWidth*screenHeight)/10))
|
|
||||||
}
|
|
||||||
|
|
||||||
// init inits world with a random state.
|
// init inits world with a random state.
|
||||||
func (w *World) init(maxLiveCells int) {
|
func (w *World) init(maxLiveCells int) {
|
||||||
for i := 0; i < maxLiveCells; i++ {
|
for i := 0; i < maxLiveCells; i++ {
|
||||||
@ -156,25 +155,36 @@ const (
|
|||||||
screenHeight = 240
|
screenHeight = 240
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
type Game struct {
|
||||||
world *World
|
world *World
|
||||||
pixels = make([]byte, screenWidth*screenHeight*4)
|
pixels []byte
|
||||||
)
|
}
|
||||||
|
|
||||||
func update(screen *ebiten.Image) error {
|
func (g *Game) Update(screen *ebiten.Image) error {
|
||||||
world.Update()
|
g.world.Update()
|
||||||
|
|
||||||
if ebiten.IsDrawingSkipped() {
|
|
||||||
return nil
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *Game) Draw(screen *ebiten.Image) {
|
||||||
|
if g.pixels == nil {
|
||||||
|
g.pixels = make([]byte, screenWidth*screenHeight*4)
|
||||||
}
|
}
|
||||||
|
g.world.Draw(g.pixels)
|
||||||
|
screen.ReplacePixels(g.pixels)
|
||||||
|
}
|
||||||
|
|
||||||
world.Draw(pixels)
|
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
|
||||||
screen.ReplacePixels(pixels)
|
return screenWidth, screenHeight
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Game of Life (Ebiten Demo)"); err != nil {
|
g := &Game{
|
||||||
|
world: NewWorld(screenWidth, screenHeight, int((screenWidth*screenHeight)/10)),
|
||||||
|
}
|
||||||
|
|
||||||
|
ebiten.SetWindowSize(screenWidth*2, screenHeight*2)
|
||||||
|
ebiten.SetWindowTitle("Game of Life (Ebiten Demo)")
|
||||||
|
if err := ebiten.RunGame(g); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user