Ebiten example - gamepad

// +build example package main import ( "fmt" "log" "strconv" "strings" "github.com/hajimehoshi/ebiten" "github.com/hajimehoshi/ebiten/ebitenutil" ) const ( screenWidth = 320 screenHeight = 240 ) func update(screen *ebiten.Image) error { // TODO: API to get the available, lowest ID const gamepadID = 0 axes := []string{} pressedButtons := []string{} maxAxis := ebiten.GamepadAxisNum(gamepadID) for a := 0; a < maxAxis; a++ { v := ebiten.GamepadAxis(gamepadID, a) axes = append(axes, fmt.Sprintf("%d: %0.6f", a, v)) } maxButton := ebiten.GamepadButton(ebiten.GamepadButtonNum(gamepadID)) for b := ebiten.GamepadButton(gamepadID); b < maxButton; b++ { if ebiten.IsGamepadButtonPressed(gamepadID, b) { pressedButtons = append(pressedButtons, strconv.Itoa(int(b))) } } if ebiten.IsRunningSlowly() { return nil } str := `Gamepad Axes: {{.Axes}} Pressed Buttons: {{.Buttons}}` str = strings.Replace(str, "{{.Axes}}", strings.Join(axes, "\n "), -1) str = strings.Replace(str, "{{.Buttons}}", strings.Join(pressedButtons, ", "), -1) ebitenutil.DebugPrint(screen, str) return nil } func main() { if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Gamepad (Ebiten Demo)"); err != nil { log.Fatal(err) } }