Guest User

Untitled

a guest
May 20th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "image"
  5. "image/png"
  6. "log"
  7. "os"
  8. "time"
  9. "unsafe"
  10.  
  11. "github.com/veandco/go-sdl2/sdl"
  12. )
  13.  
  14. func main() {
  15. sdl.Init(sdl.INIT_EVERYTHING)
  16. window, render, err := sdl.CreateWindowAndRenderer(1024, 768, sdl.WINDOW_SHOWN)
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. f, err := os.Open("rocket.png")
  21. if err != nil {
  22. log.Fatal(err)
  23. }
  24. img, err := png.Decode(f)
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28. ir, ok := img.(*image.RGBA)
  29. if !ok {
  30. log.Fatal("Not RGBA")
  31. }
  32. width := int32(ir.Bounds().Dx())
  33. height := int32(ir.Bounds().Dy())
  34. surf, err := sdl.CreateRGBSurfaceWithFormatFrom(
  35. unsafe.Pointer(&ir.Pix[0]),
  36. width,
  37. height,
  38. 32,
  39. int32(ir.Bounds().Dx()*4),
  40. // this has confused me in the past, must be ABGR, at least on Intel 64 bit
  41. sdl.PIXELFORMAT_ABGR8888,
  42. )
  43. if err != nil {
  44. log.Fatal(err)
  45. }
  46. tex, err := render.CreateTextureFromSurface(surf)
  47. if err != nil {
  48. log.Fatal(err)
  49. }
  50. t := time.Tick(16 * time.Millisecond)
  51. window.Show()
  52. y := 768 - height/2
  53. for {
  54. <-t
  55. render.Copy(
  56. tex,
  57. &sdl.Rect{0, 0, width, height},
  58. &sdl.Rect{1024/2, y, width/2, height/2},
  59. )
  60. y = y - 5
  61. if y <= 0-height/2 {
  62. return
  63. }
  64. render.Present()
  65. }
  66.  
  67. }
Add Comment
Please, Sign In to add comment