From 317cfb17b02db266a2324591a560761010a9164a Mon Sep 17 00:00:00 2001 From: faiface <faiface@ksp.sk> Date: Sun, 9 Apr 2017 15:32:46 +0200 Subject: [PATCH] add code for 04 guide --- .../main.go | 101 ++++++++++++++++++ .../trees.png | Bin 0 -> 2541 bytes 2 files changed, 101 insertions(+) create mode 100644 examples/guide/04_pressing_keys_and_clicking_mouse/main.go create mode 100644 examples/guide/04_pressing_keys_and_clicking_mouse/trees.png diff --git a/examples/guide/04_pressing_keys_and_clicking_mouse/main.go b/examples/guide/04_pressing_keys_and_clicking_mouse/main.go new file mode 100644 index 0000000..3c41512 --- /dev/null +++ b/examples/guide/04_pressing_keys_and_clicking_mouse/main.go @@ -0,0 +1,101 @@ +package main + +import ( + "image" + "math" + "math/rand" + "os" + "time" + + _ "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) + } + + spritesheet, err := loadPicture("trees.png") + if err != nil { + panic(err) + } + + var treesFrames []pixel.Rect + for x := spritesheet.Bounds().Min.X(); x < spritesheet.Bounds().Max.X(); x += 32 { + for y := spritesheet.Bounds().Min.Y(); y < spritesheet.Bounds().Max.Y(); y += 32 { + treesFrames = append(treesFrames, pixel.R(x, y, x+32, y+32)) + } + } + + var ( + camPos = pixel.V(0, 0) + camSpeed = 500.0 + camZoom = 1.0 + camZoomSpeed = 1.2 + trees []*pixel.Sprite + ) + + last := time.Now() + for !win.Closed() { + dt := time.Since(last).Seconds() + last = time.Now() + + cam := pixel.IM.Scaled(camPos, camZoom).Moved(win.Bounds().Center() - camPos) + win.SetMatrix(cam) + + if win.JustPressed(pixelgl.MouseButtonLeft) { + tree := pixel.NewSprite(spritesheet, treesFrames[rand.Intn(len(treesFrames))]) + mouse := cam.Unproject(win.MousePosition()) + tree.SetMatrix(pixel.IM.Scaled(0, 4).Moved(mouse)) + trees = append(trees, tree) + } + if win.Pressed(pixelgl.KeyLeft) { + camPos -= pixel.X(camSpeed * dt) + } + if win.Pressed(pixelgl.KeyRight) { + camPos += pixel.X(camSpeed * dt) + } + if win.Pressed(pixelgl.KeyDown) { + camPos -= pixel.Y(camSpeed * dt) + } + if win.Pressed(pixelgl.KeyUp) { + camPos += pixel.Y(camSpeed * dt) + } + camZoom *= math.Pow(camZoomSpeed, win.MouseScroll().Y()) + + win.Clear(colornames.Forestgreen) + + for _, tree := range trees { + tree.Draw(win) + } + + win.Update() + } +} + +func main() { + pixelgl.Run(run) +} diff --git a/examples/guide/04_pressing_keys_and_clicking_mouse/trees.png b/examples/guide/04_pressing_keys_and_clicking_mouse/trees.png new file mode 100644 index 0000000000000000000000000000000000000000..73a6beca00db1b82bf2443eb116873b0414229b9 GIT binary patch literal 2541 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 D+ivhK literal 0 HcmV?d00001 -- GitLab