diff --git a/examples/guide/02_drawing_a_sprite/hiking.png b/examples/guide/02_drawing_a_sprite/hiking.png
new file mode 100644
index 0000000000000000000000000000000000000000..83496bcb0e877e8936df6d8768b2657db97041f2
Binary files /dev/null and b/examples/guide/02_drawing_a_sprite/hiking.png differ
diff --git a/examples/guide/02_drawing_a_sprite/main.go b/examples/guide/02_drawing_a_sprite/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..d381a9deec398a9a86e52f338715063e6ac0f7b6
--- /dev/null
+++ b/examples/guide/02_drawing_a_sprite/main.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+	"image"
+	"os"
+
+	_ "image/png"
+
+	"github.com/faiface/pixel"
+	"github.com/faiface/pixel/pixelgl"
+	"golang.org/x/image/colornames"
+)
+
+func loadPicture(path string) (pixel.Picture, error) {
+	file, err := os.Open(path)
+	if err != nil {
+		return nil, err
+	}
+	defer file.Close()
+	img, _, err := image.Decode(file)
+	if err != nil {
+		return nil, err
+	}
+	return pixel.PictureDataFromImage(img), nil
+}
+
+func run() {
+	cfg := pixelgl.WindowConfig{
+		Title:  "Pixel Rocks!",
+		Bounds: pixel.R(0, 0, 1024, 768),
+		VSync:  true,
+	}
+	win, err := pixelgl.NewWindow(cfg)
+	if err != nil {
+		panic(err)
+	}
+
+	pic, err := loadPicture("hiking.png")
+	if err != nil {
+		panic(err)
+	}
+
+	sprite := pixel.NewSprite(pic, pic.Bounds())
+
+	win.Clear(colornames.Greenyellow)
+
+	sprite.SetMatrix(pixel.IM.Moved(win.Bounds().Center()))
+	sprite.Draw(win)
+
+	for !win.Closed() {
+		win.Update()
+	}
+}
+
+func main() {
+	pixelgl.Run(run)
+}