2015-01-08 15:45:30 +01:00
<!DOCTYPE html>
2015-01-08 18:48:25 +01:00
< link rel = "shortcut icon" href = "../favicon.png" type = "image/png" >
< link rel = "icon" href = "../favicon.png" type = "image/png" >
2015-01-08 19:29:59 +01:00
< title > Ebiten example - keyboard< / title >
2016-08-26 19:28:57 +02:00
< link rel = "stylesheet" href = "/stylesheets/bootstrap.min.css" >
< link rel = "stylesheet" href = "/stylesheets/ebiten.css" >
< header class = "navbar" > < div class = "container" >
< div class = "navbar-header" >
< a class = "navbar-brand" href = "/" > Ebiten< / a >
< / div >
2016-08-26 19:37:08 +02:00
< nav class = "collapse navbar-collapse" >
< ul class = "nav navbar-nav navbar-right" >
< li > < a href = "https://github.com/hajimehoshi/ebiten" > GitHub< / a > < / li >
< li > < a href = "http://godoc.org/github.com/hajimehoshi/ebiten" > GoDoc< / a > < / li >
< li > < a href = "https://github.com/hajimehoshi/ebiten/wiki" > Wiki< / a >
< / ul >
< / nav >
2016-08-26 19:28:57 +02:00
< / header >
2015-01-08 15:45:30 +01:00
2016-08-26 19:28:57 +02:00
< main > < div class = "container" >
2016-08-26 20:18:16 +02:00
< h2 > Ebiten example - keyboard< / h2 >
2016-08-26 19:28:57 +02:00
< iframe src = "keyboard.content.html" width = "640" height = "480" > < / iframe >
< pre > < code > // + build example
2016-08-26 16:33:36 +02:00
package main
2015-01-08 15:45:30 +01:00
import (
2016-08-26 22:36:52 +02:00
" log"
" strconv"
2016-02-15 17:13:04 +01:00
2016-08-26 22:36:52 +02:00
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
" github.com/hajimehoshi/ebiten/examples/keyboard/keyboard"
2015-01-08 15:45:30 +01:00
)
const (
2016-08-26 22:36:52 +02:00
screenWidth = 320
screenHeight = 240
2015-01-08 15:45:30 +01:00
)
2015-01-20 16:51:55 +01:00
var keyboardImage *ebiten.Image
func init() {
2016-08-26 22:36:52 +02:00
var err error
keyboardImage, _, err = ebitenutil.NewImageFromFile(" _resources/images/keyboard/keyboard.png" , ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-20 16:51:55 +01:00
}
2015-01-08 15:45:30 +01:00
var keyNames = map[ebiten.Key]string{
2016-08-26 22:36:52 +02:00
ebiten.KeyBackspace: " BS" ,
ebiten.KeyComma: " ," ,
ebiten.KeyDelete: " Del" ,
ebiten.KeyEnter: " Enter" ,
ebiten.KeyEscape: " Esc" ,
ebiten.KeyPeriod: " ." ,
ebiten.KeySpace: " Space" ,
ebiten.KeyTab: " Tab" ,
// Arrows
ebiten.KeyDown: " Down" ,
ebiten.KeyLeft: " Left" ,
ebiten.KeyRight: " Right" ,
ebiten.KeyUp: " Up" ,
// Mods
ebiten.KeyShift: " Shift" ,
ebiten.KeyControl: " Ctrl" ,
ebiten.KeyAlt: " Alt" ,
2015-01-08 15:45:30 +01:00
}
2015-01-20 16:51:55 +01:00
type pressedKeysParts []string
func (p pressedKeysParts) Len() int {
2016-08-26 22:36:52 +02:00
return len(p)
2015-01-20 16:51:55 +01:00
}
func (p pressedKeysParts) Dst(i int) (x0, y0, x1, y1 int) {
2016-08-26 22:36:52 +02:00
k := p[i]
r, ok := keyboard.KeyRect(k)
if !ok {
return 0, 0, 0, 0
}
return r.Min.X, r.Min.Y, r.Max.X, r.Max.Y
2015-01-20 16:51:55 +01:00
}
func (p pressedKeysParts) Src(i int) (x0, y0, x1, y1 int) {
2016-08-26 22:36:52 +02:00
return p.Dst(i)
2015-01-20 16:51:55 +01:00
}
2015-01-08 15:45:30 +01:00
func update(screen *ebiten.Image) error {
2016-08-26 22:36:52 +02:00
const offsetX, offsetY = 24, 40
op := & ebiten.DrawImageOptions{}
op.GeoM.Translate(offsetX, offsetY)
op.ColorM.Scale(0.5, 0.5, 0.5, 1)
if err := screen.DrawImage(keyboardImage, op); err != nil {
return err
}
pressed := []string{}
for i := 0; i < = 9; i+ + {
if ebiten.IsKeyPressed(ebiten.Key(i) + ebiten.Key0) {
pressed = append(pressed, string(i+ ' 0' ))
}
2015-01-08 15:45:30 +01:00
}
2016-08-26 22:36:52 +02:00
for c := ' A' ; c < = ' Z' ; c+ + {
if ebiten.IsKeyPressed(ebiten.Key(c) - ' A' + ebiten.KeyA) {
pressed = append(pressed, string(c))
}
2015-01-08 15:45:30 +01:00
}
2016-08-26 22:36:52 +02:00
for i := 1; i < = 12; i+ + {
if ebiten.IsKeyPressed(ebiten.Key(i) + ebiten.KeyF1 - 1) {
pressed = append(pressed, " F" + strconv.Itoa(i))
}
2015-01-08 15:45:30 +01:00
}
2016-08-26 22:36:52 +02:00
for key, name := range keyNames {
if ebiten.IsKeyPressed(key) {
pressed = append(pressed, name)
}
2015-01-08 15:45:30 +01:00
}
2015-01-20 16:51:55 +01:00
2016-08-26 22:36:52 +02:00
op = & ebiten.DrawImageOptions{
ImageParts: pressedKeysParts(pressed),
}
op.GeoM.Translate(offsetX, offsetY)
if err := screen.DrawImage(keyboardImage, op); err != nil {
return err
}
2015-01-20 16:51:55 +01:00
2016-08-26 22:36:52 +02:00
return nil
2015-01-08 15:45:30 +01:00
}
func main() {
2016-08-26 22:36:52 +02:00
if err := ebiten.Run(update, screenWidth, screenHeight, 2, " Keyboard (Ebiten Demo)" ); err != nil {
log.Fatal(err)
}
2015-01-08 15:45:30 +01:00
}
< / code > < / pre >
2016-08-26 19:28:57 +02:00
< / div > < / main >
< footer > < div class = "container" >
< p > © 2013 Hajime Hoshi< / p >
< p > Code is licensed under < a href = "https://github.com/hajimehoshi/ebiten/blob/master/LICENSE" > Apache License 2.0< / a > .< / p >
< p > The content of this page is licensed under < a href = "https://creativecommons.org/licenses/by/4.0/" > the Creative Commons Attribution 4.0 License< / a > .< / p >
< / div > < / footer >
2015-01-08 15:45:30 +01:00