ソースコード
package main
import (
"image/color"
_ "image/png"
"log"
"github.com/hajimehoshi/ebiten/inpututil"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
)
const (
screenWidth = 320
screenHeight = 240
)
var (
gopherImage *ebiten.Image
dx float64 = 0
dy float64 = 0
xspeed float64 = 57
yspeed float64 = 50
)
func repeatingKeyPressed(key ebiten.Key) bool {
const (
delay = 30
interval = 3
)
d := inpututil.KeyPressDuration(key)
if d == 1 {
return true
}
if d >= delay && (d-delay)%interval == 0 {
return true
}
return false
}
func update(screen *ebiten.Image) error {
if ebiten.IsDrawingSkipped() {
return nil
}
screen.Fill(color.NRGBA{0xff, 0xff, 0xff, 0xff})
if repeatingKeyPressed(ebiten.KeyD) {
dx += float64(xspeed)
}
if repeatingKeyPressed(ebiten.KeyA) {
dx -= float64(xspeed)
}
if repeatingKeyPressed(ebiten.KeyW) {
dy -= float64(yspeed)
}
if repeatingKeyPressed(ebiten.KeyS) {
dy += float64(yspeed)
}
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(dx, dy)
screen.DrawImage(gopherImage, op)
return nil
}
func main() {
// prepare Image
gopherImage, _, _ = ebitenutil.NewImageFromFile("gopher_help.png", ebiten.FilterDefault)
// Run Program
if err := ebiten.Run(update, screenWidth, screenHeight, 2, "I'm Gopher!"); err != nil {
log.Fatal(err)
}
}
動いている様子
使用した画像
簡単な解説
ebiten.Run(f func(*Image) error, width, height int, scale float64, title string) error
プログラムを実行する関数fが60FPS(1秒間に60回)で呼ばれる
width : ウィンドウの幅
height : ウィンドウの高さ
scale : 画面を拡大するためのスケール
title : ゲームのタイトル(ウィンドウのタイトルとして表示される)
func update(screen *ebiten.Image) error
1フレームごとに呼ばれる関数ここにプログラム内の動作(画面の描画、キャラクターの描画、キーイベントの受け取りなど)を記述する
screen : ウィンドウ本体
func IsKeyPressed(key Key) bool
keyが押されたかどうかをbool型で返す関数keyについては次のURLへ
https://godoc.org/github.com/hajimehoshi/ebiten#Key
参考URL
https://github.com/hajimehoshi/ebitenhttps://godoc.org/github.com/hajimehoshi/ebiten
https://godoc.org/github.com/hajimehoshi/ebiten/ebitenutil
最後に
もっと時間をかければ簡単なゲームくらい作れそう何か出来たら投稿します