ebiten/_docs/public/index.html

388 lines
10 KiB
HTML
Raw Normal View History

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;
}
2015-01-06 03:34:54 +01:00
table.examples {
border-collapse: separate;
border-spacing: 0 1em;
}
2014-12-28 07:37:51 +01:00
table.examples td {
2015-01-06 03:34:54 +01:00
padding: 0;
2014-12-28 07:37:51 +01:00
vertical-align: top;
}
table.examples td.code pre {
height: 240px;
2015-01-06 03:34:54 +01:00
margin: 0;
2014-12-28 07:37:51 +01:00
overflow: auto;
}
2015-01-06 03:34:54 +01:00
table.examples td.screen {
padding-left: 1em;
}
table.examples iframe, table.examples img {
2015-01-05 16:44:39 +01:00
border-color: #999;
border-style: solid;
border-width: 1px;
overflow: hidden;
}
2015-01-06 03:34:54 +01:00
pre {
background: #eee;
padding: 1em;
}
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>
<li>Web browsers (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
2015-01-06 03:34:54 +01:00
<td class="screen">Click to play!<br><a href="example/blocks.html"><img src="blocks.png" width="256" height="240"></a></td>
2015-01-05 16:44:39 +01:00
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 (
2015-01-06 15:04:57 +01:00
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
&#34;math&#34;
2014-12-28 07:09:40 +01:00
)
const (
2015-01-06 15:04:57 +01:00
screenWidth = 320
screenHeight = 240
2014-12-28 07:09:40 +01:00
)
var (
2015-01-06 15:04:57 +01:00
count int
gophersImage *ebiten.Image
2014-12-28 07:09:40 +01:00
)
func update(screen *ebiten.Image) error {
2015-01-06 15:04:57 +01:00
count&#43;&#43;
w, h := gophersImage.Size()
op := &amp;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 {
return err
}
return nil
2014-12-28 07:09:40 +01:00
}
func main() {
2015-01-06 15:04:57 +01:00
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Hue (Ebiten Demo)&#34;); err != nil {
log.Fatal(err)
}
2014-12-28 07:09:40 +01:00
}
</code></pre></td>
2015-01-05 16:44:39 +01:00
2015-01-06 03:34:54 +01:00
<td class="screen"><iframe src="example/hue.html" width="320" height="240"></iframe></td>
2015-01-05 16:44:39 +01:00
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 (
2015-01-06 15:04:57 +01:00
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
2014-12-27 22:18:23 +01:00
)
const (
2015-01-06 15:04:57 +01:00
screenWidth = 320
screenHeight = 240
2014-12-27 22:18:23 +01:00
)
const mosaicRatio = 16
var (
2015-01-06 15:04:57 +01:00
gophersImage *ebiten.Image
gophersRenderTarget *ebiten.Image
2014-12-27 22:18:23 +01:00
)
func update(screen *ebiten.Image) error {
2015-01-06 15:04:57 +01:00
op := &amp;ebiten.DrawImageOptions{}
op.GeoM.Scale(1.0/mosaicRatio, 1.0/mosaicRatio)
gophersRenderTarget.DrawImage(gophersImage, op)
op = &amp;ebiten.DrawImageOptions{}
op.GeoM.Scale(mosaicRatio, mosaicRatio)
screen.DrawImage(gophersRenderTarget, op)
return nil
2014-12-27 22:18:23 +01:00
}
func main() {
2015-01-06 15:04:57 +01:00
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, 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)
}
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Mosaic (Ebiten Demo)&#34;); err != nil {
log.Fatal(err)
}
2014-12-27 22:18:23 +01:00
}
</code></pre></td>
2015-01-05 16:44:39 +01:00
2015-01-06 03:34:54 +01:00
<td class="screen"><iframe src="example/mosaic.html" width="320" height="240"></iframe></td>
2015-01-05 16:44:39 +01:00
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 (
2015-01-06 15:04:57 +01:00
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
2014-12-27 22:18:23 +01:00
)
const (
2015-01-06 15:04:57 +01:00
screenWidth = 320
screenHeight = 240
2014-12-27 22:18:23 +01:00
)
var (
2015-01-06 15:04:57 +01:00
gophersImage *ebiten.Image
2014-12-27 22:18:23 +01:00
)
type parts struct {
2015-01-06 15:04:57 +01:00
image *ebiten.Image
}
func (p parts) Len() int {
2015-01-06 15:04:57 +01:00
_, h := p.image.Size()
return h
}
func (p parts) Dst(i int) (x0, y0, x1, y1 int) {
2015-01-06 15:04:57 +01:00
w, h := p.image.Size()
width := w &#43; i*3/4
x := ((h - i) * 3 / 4) / 2
return x, i, x &#43; width, i &#43; 1
}
func (p parts) Src(i int) (x0, y0, x1, y1 int) {
2015-01-06 15:04:57 +01:00
w, _ := p.image.Size()
return 0, i, w, i &#43; 1
}
2014-12-27 22:18:23 +01:00
func update(screen *ebiten.Image) error {
2015-01-06 15:04:57 +01:00
op := &amp;ebiten.DrawImageOptions{
ImageParts: &amp;parts{gophersImage},
}
w, h := gophersImage.Size()
maxWidth := float64(w) &#43; float64(h)*0.75
op.GeoM.Translate(-maxWidth/2, -float64(h)/2)
op.GeoM.Translate(screenWidth/2, screenHeight/2)
screen.DrawImage(gophersImage, op)
return nil
2014-12-27 22:18:23 +01:00
}
func main() {
2015-01-06 15:04:57 +01:00
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Perspective (Ebiten Demo)&#34;); err != nil {
log.Fatal(err)
}
2014-12-27 22:18:23 +01:00
}
</code></pre></td>
2015-01-05 16:44:39 +01:00
2015-01-06 03:34:54 +01:00
<td class="screen"><iframe src="example/perspective.html" width="320" height="240"></iframe></td>
2015-01-05 16:44:39 +01:00
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 (
2015-01-06 15:04:57 +01:00
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
&#34;math&#34;
2014-12-27 22:18:23 +01:00
)
const (
2015-01-06 15:04:57 +01:00
screenWidth = 320
screenHeight = 240
2014-12-27 22:18:23 +01:00
)
var (
2015-01-06 15:04:57 +01:00
count int
gophersImage *ebiten.Image
2014-12-27 22:18:23 +01:00
)
func update(screen *ebiten.Image) error {
2015-01-06 15:04:57 +01:00
count&#43;&#43;
w, h := gophersImage.Size()
op := &amp;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 {
return err
}
return nil
2014-12-27 22:18:23 +01:00
}
func main() {
2015-01-06 15:04:57 +01:00
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Rotate (Ebiten Demo)&#34;); err != nil {
log.Fatal(err)
}
2014-12-27 22:18:23 +01:00
}
</code></pre></td>
2015-01-05 16:44:39 +01:00
2015-01-06 03:34:54 +01:00
<td class="screen"><iframe src="example/rotate.html" width="320" height="240"></iframe></td>
2015-01-05 16:44:39 +01:00
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
:; go get github.com/hajimehoshi/ebiten</code></pre>
<p>If you want to run your game on a web browser, execute this:</p>
<pre><code>:; go get github.com/gopherjs/gopherjs
:; go get github.com/gopherjs/webgl</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
<h2>Execute the example on a web browser</h2>
2015-01-05 17:56:58 +01:00
<p>If you can the example screens above, Ebiten is working on your browser! Each example above works as an independent html in an iframe. If you want to execute the examples apart from this site, execute this:</p>
<pre><code>:; 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>
2015-01-05 17:56:58 +01:00
<p>Of cource, you can execute gopherjs yourself. Please see <a href="http://gopherjs.org/">GopherJS site</a> for more detail.</p>
<h2>Run your game on a web browser</h2>
<p>Compile your game with GopherJS:</p>
<pre><code>:; gopherjs build -o yourgame.js path/to/yourgame</code></pre>
<p>Then, open the below HTML on your HTTP server:</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;script src="yourgame.js"&gt;&lt;/script&gt;</code></pre>
2015-01-05 17:56:58 +01:00
<h2>Change Log</h2>
<h3>2015-??-??</h3>
<ul>
<li>v1.1.0-rc1 released.
<ul>
<li>Support for web browsers: Ebiten now includes support for web browsers with GopherJS.</li>
<li>Some API has changed:
<ul>
<li>ImagePart is deprecated. Use ImageParts interface instead.</li>
<li>ColorM.Element and GeoM.Element's recievers changed from structs to pointers.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>2015-01-04</h3>
<ul>
<li>v1.0.0 released.
<ul>
<li>Nothing has changed from v1.0.0-rc1.</li>
</ul>
</li>
</ul>
<h3>2014-12-29</h3>
<ul>
<li>v1.0.0-rc1 released.</li>
</ul>
2014-12-27 22:18:23 +01:00
<h2>License</h2>
<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 &#34;License&#34;);
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 &#34;AS IS&#34; 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.
</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>