Gopher君を動かしたい

ebitenというライブラリを使用しWASDで動かしてみました。

ソースコード

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)
    }
}

動いている様子

使用した画像

gopher君の画像

Gopherの原著作者はRenée French氏です。

簡単な解説

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/ebiten
https://godoc.org/github.com/hajimehoshi/ebiten
https://godoc.org/github.com/hajimehoshi/ebiten/ebitenutil

最後に

もっと時間をかければ簡単なゲームくらい作れそう
何か出来たら投稿します
スポンサーリンク
レクタングル広告(大)
レクタングル広告(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする