ebiten/_docs/public/index.html

381 lines
9.8 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;
}
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>
<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-05 16:57:58 +01:00
<td>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 (
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
&#34;math&#34;
)
const (
screenWidth = 320
screenHeight = 240
)
var (
count int
gophersImage *ebiten.Image
)
func update(screen *ebiten.Image) error {
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 {
2014-12-28 07:09:40 +01:00
return err
}
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Hue (Ebiten Demo)&#34;); 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 (
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
)
const (
screenWidth = 320
screenHeight = 240
)
const mosaicRatio = 16
var (
gophersImage *ebiten.Image
gophersRenderTarget *ebiten.Image
)
func update(screen *ebiten.Image) error {
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)
2014-12-27 22:18:23 +01:00
return nil
}
func main() {
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)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Mosaic (Ebiten Demo)&#34;); 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 (
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
)
const (
screenWidth = 320
screenHeight = 240
)
var (
gophersImage *ebiten.Image
)
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 &#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) {
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 {
op := &amp;ebiten.DrawImageOptions{
ImageParts: &amp;parts{gophersImage},
2014-12-27 22:18:23 +01:00
}
w, h := gophersImage.Size()
2014-12-27 22:18:23 +01:00
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)
2014-12-27 22:18:23 +01:00
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Perspective (Ebiten Demo)&#34;); 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 (
&#34;github.com/hajimehoshi/ebiten&#34;
&#34;github.com/hajimehoshi/ebiten/ebitenutil&#34;
_ &#34;image/jpeg&#34;
&#34;log&#34;
&#34;math&#34;
)
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&#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 {
2014-12-27 22:18:23 +01:00
return err
}
return nil
}
func main() {
var err error
gophersImage, _, err = ebitenutil.NewImageFromFile(&#34;images/gophers.jpg&#34;, ebiten.FilterNearest)
if err != nil {
log.Fatal(err)
}
2015-01-05 16:44:39 +01:00
if err := ebiten.Run(update, screenWidth, screenHeight, 1, &#34;Rotate (Ebiten Demo)&#34;); 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>
<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
<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 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>
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>:; go get github.com/gopherjs/gopherjs
:; 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>