2014-12-27 16:26:33 +01:00
<!DOCTYPE html>
2014-12-29 15:52:37 +01:00
<!--
2014-12-31 16:04:06 +01:00
Copyright 2015 Hajime Hoshi
2014-12-27 16:26:33 +01:00
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
2014-12-29 15:16:02 +01:00
limitations under the License.
2014-12-29 15:52:37 +01:00
2014-12-29 15:16:02 +01:00
-->
2014-12-28 08:59:04 +01:00
< link rel = "shortcut icon" href = "./favicon.png" type = "image/png" >
< link rel = "icon" href = "./favicon.png" type = "image/png" >
2014-12-28 09:14:56 +01:00
< title > Ebiten - A simple SNES-like 2D game library in Go< / title >
2014-12-28 07:37:51 +01:00
< style >
2014-12-28 08:54:13 +01:00
body {
font-family: sans-serif;
}
2014-12-28 07:37:51 +01:00
table.examples td {
vertical-align: top;
}
table.examples td.code {
border-color: #999;
border-style: solid;
border-width: 1px;
}
table.examples td.code pre {
height: 240px;
overflow: auto;
}
2015-01-05 16:44:39 +01:00
table.examples iframe {
border-color: #999;
border-style: solid;
border-width: 1px;
overflow: hidden;
}
2014-12-28 07:37:51 +01:00
< / style >
2014-12-29 15:16:02 +01:00
< h1 > Ebiten (海老天)< / h1 >
2014-12-29 16:53:41 +01:00
< p > v1.1.0-alpha< / p >
2014-12-27 16:26:33 +01:00
< ul >
2014-12-28 09:12:17 +01:00
< li > A simple SNES-like 2D game library in Go< / li >
2014-12-27 22:18:23 +01:00
< li > Works on
< ul >
2015-01-05 15:55:25 +01:00
< li > HTML5 (powered by < a href = "http://gopherjs.org/" > GopherJS< / a > )
2014-12-27 22:18:23 +01:00
< li > Mac OS X< / li >
< li > Linux (maybe)< / li >
< li > Windows (possibly)< / li >
< / ul >
< / li >
< li > < a href = "http://godoc.org/github.com/hajimehoshi/ebiten" > API Docs< / a > < / li >
2014-12-29 16:53:41 +01:00
< li > < a href = "http://github.com/hajimehoshi/ebiten" > Source Code< / a > (Development version: v1.1.0-alpha)< / li >
2014-12-27 16:26:33 +01:00
< / ul >
2014-12-27 22:18:23 +01:00
< h2 > Features< / h2 >
2014-12-27 16:26:33 +01:00
< ul >
< li > 2D Graphics< / li >
< li > Input (Mouse, Keyboard)< / li >
< / ul >
2014-12-27 22:18:23 +01:00
< h2 > Example< / h2 >
2014-12-28 07:37:51 +01:00
< table class = "examples" >
2014-12-27 22:18:23 +01:00
2014-12-29 10:43:35 +01:00
< tr >
< td class = "code" > < pre > < code > // < b > blocks< / b >
// Please read example/blocks/main.go and example/blocks/blocks/*.go< / code > < / pre > < / td >
2015-01-05 16:44:39 +01:00
< td > (TODO: Implement link)< / td >
2014-12-29 10:43:35 +01:00
< / tr >
2014-12-27 22:18:23 +01:00
< tr >
2014-12-28 07:37:51 +01:00
< td class = "code" > < pre > < code > // < b > hue< / b >
package main
2014-12-27 22:18:23 +01:00
2014-12-28 07:09:40 +01:00
import (
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
_ " image/jpeg"
" log"
" math"
)
const (
screenWidth = 320
screenHeight = 240
)
var (
count int
gophersImage *ebiten.Image
)
func update(screen *ebiten.Image) error {
count+ +
w, h := gophersImage.Size()
2015-01-05 15:55:25 +01:00
op := & ebiten.DrawImageOptions{}
op.GeoM.Translate(float64(screenWidth-w)/2, float64(screenHeight-h)/2)
op.ColorM.Concat(ebiten.RotateHue(float64(count%360) * 2 * math.Pi / 360))
if err := screen.DrawImage(gophersImage, op); err != nil {
2014-12-28 07:09:40 +01:00
return err
}
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(" images/gophers.jpg" , ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, " Hue (Ebiten Demo)" ); err != nil {
2014-12-28 07:09:40 +01:00
log.Fatal(err)
}
}
< / code > < / pre > < / td >
2015-01-05 16:44:39 +01:00
< td > < iframe src = "example/hue.html" width = "320" height = "240" > < / iframe > < / td >
2014-12-28 07:09:40 +01:00
< / tr >
< tr >
2014-12-28 07:37:51 +01:00
< td class = "code" > < pre > < code > // < b > mosaic< / b >
package main
2014-12-28 07:09:40 +01:00
2014-12-27 22:18:23 +01:00
import (
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
_ " image/jpeg"
" log"
)
const (
screenWidth = 320
screenHeight = 240
)
const mosaicRatio = 16
var (
gophersImage *ebiten.Image
gophersRenderTarget *ebiten.Image
)
func update(screen *ebiten.Image) error {
2015-01-05 15:55:25 +01:00
op := & ebiten.DrawImageOptions{}
op.GeoM.Scale(1.0/mosaicRatio, 1.0/mosaicRatio)
gophersRenderTarget.DrawImage(gophersImage, op)
op = & ebiten.DrawImageOptions{}
op.GeoM.Scale(mosaicRatio, mosaicRatio)
screen.DrawImage(gophersRenderTarget, op)
2014-12-27 22:18:23 +01:00
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(" images/gophers.jpg" , ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
w, h := gophersImage.Size()
gophersRenderTarget, err = ebiten.NewImage(w/mosaicRatio, h/mosaicRatio, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, " Mosaic (Ebiten Demo)" ); err != nil {
2014-12-27 22:18:23 +01:00
log.Fatal(err)
}
}
< / code > < / pre > < / td >
2015-01-05 16:44:39 +01:00
< td > < iframe src = "example/mosaic.html" width = "320" height = "240" > < / iframe > < / td >
2014-12-27 22:18:23 +01:00
< / tr >
< tr >
2014-12-28 07:37:51 +01:00
< td class = "code" > < pre > < code > // < b > perspective< / b >
package main
2014-12-27 22:18:23 +01:00
import (
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
_ " image/jpeg"
" log"
)
const (
screenWidth = 320
screenHeight = 240
)
var (
gophersImage *ebiten.Image
)
2015-01-05 15:55:25 +01:00
type parts struct {
image *ebiten.Image
}
func (p parts) Len() int {
_, h := p.image.Size()
return h
}
func (p parts) Dst(i int) (x0, y0, x1, y1 int) {
w, h := p.image.Size()
width := w + i*3/4
x := ((h - i) * 3 / 4) / 2
return x, i, x + width, i + 1
}
func (p parts) Src(i int) (x0, y0, x1, y1 int) {
w, _ := p.image.Size()
return 0, i, w, i + 1
}
2014-12-27 22:18:23 +01:00
func update(screen *ebiten.Image) error {
2015-01-05 15:55:25 +01:00
op := & ebiten.DrawImageOptions{
ImageParts: & parts{gophersImage},
2014-12-27 22:18:23 +01:00
}
2015-01-05 15:55:25 +01:00
w, h := gophersImage.Size()
2014-12-27 22:18:23 +01:00
maxWidth := float64(w) + float64(h)*0.75
2015-01-05 15:55:25 +01:00
op.GeoM.Translate(-maxWidth/2, -float64(h)/2)
op.GeoM.Translate(screenWidth/2, screenHeight/2)
screen.DrawImage(gophersImage, op)
2014-12-27 22:18:23 +01:00
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(" images/gophers.jpg" , ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, " Perspective (Ebiten Demo)" ); err != nil {
2014-12-27 22:18:23 +01:00
log.Fatal(err)
}
}
< / code > < / pre > < / td >
2015-01-05 16:44:39 +01:00
< td > < iframe src = "example/perspective.html" width = "320" height = "240" > < / iframe > < / td >
2014-12-27 22:18:23 +01:00
< / tr >
< tr >
2014-12-28 07:37:51 +01:00
< td class = "code" > < pre > < code > // < b > rotate< / b >
package main
2014-12-27 22:18:23 +01:00
import (
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
_ " image/jpeg"
" log"
" math"
)
const (
screenWidth = 320
screenHeight = 240
)
var (
2014-12-28 07:09:40 +01:00
count int
gophersImage *ebiten.Image
2014-12-27 22:18:23 +01:00
)
func update(screen *ebiten.Image) error {
count+ +
w, h := gophersImage.Size()
2015-01-05 15:55:25 +01:00
op := & ebiten.DrawImageOptions{}
op.GeoM.Translate(-float64(w)/2, -float64(h)/2)
op.GeoM.Rotate(float64(count%360) * 2 * math.Pi / 360)
op.GeoM.Translate(screenWidth/2, screenHeight/2)
if err := screen.DrawImage(gophersImage, op); err != nil {
2014-12-27 22:18:23 +01:00
return err
}
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(" images/gophers.jpg" , ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, " Rotate (Ebiten Demo)" ); err != nil {
2014-12-27 22:18:23 +01:00
log.Fatal(err)
}
}
< / code > < / pre > < / td >
2015-01-05 16:44:39 +01:00
< td > < iframe src = "example/rotate.html" width = "320" height = "240" > < / iframe > < / td >
2014-12-27 22:18:23 +01:00
< / tr >
< / table >
< h2 > Install on Mac OS X< / h2 >
2014-12-27 16:26:33 +01:00
< pre > < code > :; brew install glew
:; brew install glfw3 # or homebrew/versions/glfw3
2014-12-27 22:18:23 +01:00
:; go get -u github.com/hajimehoshi/ebiten< / code > < / pre >
2015-01-05 15:55:25 +01:00
< p > If you want to use GopherJS, execute this:< / p >
< pre > < code > :; go get -u -tag=js github.com/hajimehoshi/ebiten< / code > < / pre >
2014-12-27 16:26:33 +01:00
2014-12-27 22:18:23 +01:00
< h2 > Execute the example< / h2 >
2014-12-27 16:26:33 +01:00
< pre > < code > :; cd $GOHOME/src/github.com/hajimehoshi/ebiten/example
2014-12-27 22:18:23 +01:00
:; go run rotate/main.go< / code > < / pre >
2014-12-27 16:26:33 +01:00
2015-01-05 15:55:25 +01:00
< h2 > Execute the example on your browser< / h2 >
< pre > < code > :; go get github.com/gopherjs/gopherjs
:; go run $GOPATH/src/github.com/hajimehoshi/ebiten/example/server/main.go< / code > < / pre >
< p > Then, open < code > localhost:8000< / code > on your browser.< / p >
< p > < code > localhost:8000/?EXAMPLE_NAME< / code > shows other examples (e.g. < code > localhost:8000/?rotate< / code > ).< / p >
2014-12-27 22:18:23 +01:00
< h2 > License< / h2 >
2014-12-31 19:02:53 +01:00
< h3 > Ebiten< / h3 >
< pre > Copyright 2015 Hajime Hoshi
2014-12-27 16:26:33 +01:00
2014-12-27 22:18:23 +01:00
Licensed under the Apache License, Version 2.0 (the " License" );
2014-12-27 16:26:33 +01:00
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
2014-12-27 22:18:23 +01:00
distributed under the License is distributed on an " AS IS" BASIS,
2014-12-27 16:26:33 +01:00
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
2014-12-29 15:16:02 +01:00
limitations under the License.
2014-12-31 19:02:53 +01:00
< / pre >
< h3 > Go Gopher photograph< / h3 >
< p > < a href = "http://blog.golang.org/go-programming-language-turns-two" > The original photograph of Go gophers by Chris Nokleberg< / a > is licensed under the Creative Commons 3.0 Attributions license.< / p >