main.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "image"
  4. "os"
  5. "time"
  6. _ "image/png"
  7. "github.com/faiface/pixel"
  8. "github.com/faiface/pixel/pixelgl"
  9. "golang.org/x/image/colornames"
  10. )
  11. func loadPicture(path string) (pixel.Picture, error) {
  12. file, err := os.Open(path)
  13. if err != nil {
  14. return nil, err
  15. }
  16. defer file.Close()
  17. img, _, err := image.Decode(file)
  18. if err != nil {
  19. return nil, err
  20. }
  21. return pixel.PictureDataFromImage(img), nil
  22. }
  23. func run() {
  24. cfg := pixelgl.WindowConfig{
  25. Title: "Pixel Rocks!",
  26. Bounds: pixel.R(0, 0, 1024, 768),
  27. VSync: true,
  28. }
  29. win, err := pixelgl.NewWindow(cfg)
  30. if err != nil {
  31. panic(err)
  32. }
  33. win.SetSmooth(true)
  34. pic, err := loadPicture("../hiking.png")
  35. if err != nil {
  36. panic(err)
  37. }
  38. sprite := pixel.NewSprite(pic, pic.Bounds())
  39. angle := 0.0
  40. scale := pixel.Vec{1.0, 1.0}
  41. last := time.Now()
  42. for !win.Closed() {
  43. dt := time.Since(last).Seconds()
  44. last = time.Now()
  45. angle += 3 * dt
  46. win.Clear(colornames.Firebrick)
  47. mat := pixel.IM
  48. mat = mat.ScaledXY(pixel.ZV, scale)
  49. mat = mat.Rotated(pixel.ZV, angle)
  50. mat = mat.Moved(win.Bounds().Center())
  51. scale.X -= dt
  52. if scale.X <= 0.0 {
  53. scale.X = 1
  54. }
  55. scale.Y -= dt
  56. if scale.Y <= 0.0 {
  57. scale.Y = 1
  58. }
  59. sprite.Draw(win, mat)
  60. win.Update()
  61. }
  62. }
  63. func main() {
  64. pixelgl.Run(run)
  65. }