c2c106d34d | ||
---|---|---|
imdraw | ||
pixelgl | ||
.gitignore | ||
LICENSE | ||
README.md | ||
batch.go | ||
color.go | ||
compose.go | ||
data.go | ||
doc.go | ||
drawer.go | ||
geometry.go | ||
interface.go | ||
sprite.go |
README.md
Pixel
A simple, easy to use, fast, flexible, hand-crafted 2D game library in Go.
go get github.com/faiface/pixel
Tutorial
The Wiki of this repo contains an extensive tutorial covering several topics of Pixel. Here's the content of the tutorial parts so far:
- Creating a Window
- Drawing a Sprite
- Moving, scaling and rotating with Matrix
- Pressing keys and clicking mouse
- Drawing efficiently with Batch
- Drawing shapes with IMDraw
Examples
The examples directory contains a few examples demonstrating Pixel's functionality.
To run an example, navigate to it's directory, then go run
the main.go
file. For example:
$ cd examples/platformer
$ go run main.go
Here are some eye-catching screenshots from the examples!
Features
Here's the list of the main features in Pixel. Although Pixel is still in heavy development, you can quite expect that the features and API that is inside the library now, will not be changed in major ways. This is not a 100% guarantee thought.
- Fast 2D graphics
- Simple and convenient API
- Drawing a sprite to a window is as simple as
sprite.Draw(window)
- Adding and subtracting vectors with
+
and-
operators... how? - Wanna know where the center of a window is?
window.Bounds().Center()
- ...
- Drawing a sprite to a window is as simple as
- Full documentation and tutorial
- Works on Linux, macOS and Windows
- Window creation and manipulation (resizing, fullscreen, multiple windows, ...)
- Keyboard and mouse input without events
- Well integrated with the Go standard library
- Use
"image"
package for loading pictures - Use
"time"
package for measuring delta time and FPS - Use
"image/color"
for colors, or use Pixel's owncolor.Color
format, which supports easy multiplication and a few mor features - Pixel uses
float64
throughout the library, compatible with"math"
package
- Use
- Geometry transformations with
Matrix
- Moving, scaling, rotating
- Easy camera implementation
- Fully garbage collected, no
Close
orDispose
methods - Full Porter-Duff composition, which enables
- 2D lighting
- Cutting holes into objects
- Much more...
- Pixel let's you draw stuff and do your job, it doesn't impose any particular style or paradigm
- Off-screen drawing to Canvas or any other target (Batch, IMDraw, ...)
- Platform and backend independent core
- Core Target/Triangles/Picture pattern makes it easy to create new drawing targets that do arbitrarily crazy stuff (e.g. graphical effects)
- Small codebase, ~5K lines of code, together with the backend glhf package
Missing features
Pixel is in development and still missing few critical features. Here're the most critical ones.
- Audio
- Drawing text
- Antialiasing (filtering is supported, though)
- Better support for Hi-DPI displays
- More advanced graphical effects (e.g. blur)
Implementing these features will get us to the 1.0 release. Contribute, so that it's as soon as possible!
Requirements
PixelGL backend uses OpenGL to render graphics. Because of that, OpenGL development libraries are needed for compilation. The dependencies are same as for GLFW.
- On macOS, you need Xcode or Command Line Tools for Xcode (
xcode-select --install
) for required headers and libraries. - On Ubuntu/Debian-like Linux distributions, you need
libgl1-mesa-dev
andxorg-dev
packages. - On CentOS/Fedora-like Linux distributions, you need
libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel mesa-libGL-devel libXi-devel
packages. - See here for full details.
Contributing
TODO