From 5b2ad29f7b84f359fd3a1edc69371b8120a7a24b Mon Sep 17 00:00:00 2001
From: Sergio Vera Castellano <severa@magento.com>
Date: Wed, 27 Dec 2017 16:29:21 +0100
Subject: [PATCH] First commit

---
 .../community/scrolling-background/README.md  |   3 +
 .../scrolling-background/gamebackground.jpg   | Bin 0 -> 14039 bytes
 .../community/scrolling-background/main.go    |  77 ++++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 100644 examples/community/scrolling-background/README.md
 create mode 100644 examples/community/scrolling-background/gamebackground.jpg
 create mode 100644 examples/community/scrolling-background/main.go

diff --git a/examples/community/scrolling-background/README.md b/examples/community/scrolling-background/README.md
new file mode 100644
index 0000000..85e81cc
--- /dev/null
+++ b/examples/community/scrolling-background/README.md
@@ -0,0 +1,3 @@
+# Infinite scrolling background demo
+
+Created by [Sergio Vera](https://github.com/svera)
diff --git a/examples/community/scrolling-background/gamebackground.jpg b/examples/community/scrolling-background/gamebackground.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e5eab2bebd9ad67b49dd7af0fc3d651405460cd0
GIT binary patch
literal 14039
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

literal 0
HcmV?d00001

diff --git a/examples/community/scrolling-background/main.go b/examples/community/scrolling-background/main.go
new file mode 100644
index 0000000..9b402fa
--- /dev/null
+++ b/examples/community/scrolling-background/main.go
@@ -0,0 +1,77 @@
+package main
+
+import (
+	"image"
+	"os"
+
+	_ "image/jpeg"
+
+	"github.com/faiface/pixel"
+	"github.com/faiface/pixel/pixelgl"
+)
+
+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
+}
+
+const (
+	windowWidth  = 300
+	windowHeight = 225
+)
+
+func run() {
+	cfg := pixelgl.WindowConfig{
+		Title:  "Scrolling background demo",
+		Bounds: pixel.R(0, 0, windowWidth, windowHeight),
+		VSync:  true,
+	}
+	win, err := pixelgl.NewWindow(cfg)
+	if err != nil {
+		panic(err)
+	}
+
+	// Pic must have double the width of the window, as it will scroll to the left
+	pic, err := loadPicture("gamebackground.jpg")
+	if err != nil {
+		panic(err)
+	}
+
+	// Backgrounds are made taking the left and right halves of the image
+	background1 := pixel.NewSprite(pic, pixel.R(0, 0, windowWidth, windowHeight))
+	background2 := pixel.NewSprite(pic, pixel.R(windowWidth, 0, windowWidth*2, windowHeight))
+
+	// In the beginning, vector1 will put background1 filling the whole window, while vector2 will
+	// put background2 just at the right side of the window, out of view
+	vector1 := pixel.V(windowWidth/2, (windowHeight/2)+1)
+	vector2 := pixel.V(windowWidth+(windowWidth/2), (windowHeight/2)+1)
+
+	i := float64(0)
+	for !win.Closed() {
+		// When one of the backgrounds has completely scrolled, we swap displacement vectors,
+		// so the backgrounds will swap positions too regarding the previous iteration,
+		// thus making the background look like infinite.
+		if i == -windowWidth {
+			i = 0
+			vector1, vector2 = vector2, vector1
+		}
+		// This delta vector will move the backgrounds to the left
+		d := pixel.V(-i, 0)
+		background1.Draw(win, pixel.IM.Moved(vector1.Sub(d)))
+		background2.Draw(win, pixel.IM.Moved(vector2.Sub(d)))
+		i--
+		win.Update()
+	}
+}
+
+func main() {
+	pixelgl.Run(run)
+}
-- 
GitLab