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