// main.go package main import ( "image" _ "image/png" "os" "time" "github.com/faiface/pixel" "github.com/faiface/pixel/pixelgl" "golang.org/x/image/colornames" ) func loadSprite(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 createSpriteSheet(SpriteSheetImg pixel.Picture, spriteSizeX, spriteSizeY float64) []pixel.Rect { var frames []pixel.Rect for x := SpriteSheetImg.Bounds().Min.X; x < SpriteSheetImg.Bounds().Max.X; x += spriteSizeX { for y := SpriteSheetImg.Bounds().Min.Y; y < SpriteSheetImg.Bounds().Max.Y; y += spriteSizeY { frames = append(frames, pixel.R(x, y, x+256, y+256)) } } return frames } func run() { cfgMain := pixelgl.WindowConfig{ Title: "AsterCal", Bounds: pixel.R(0, 0, 1024, 768), VSync: true, } win, err := pixelgl.NewWindow(cfgMain) if err != nil { panic(err) } spritesheet, err := loadSprite("assets/ship_sprite_sheet.png") if err != nil { panic(err) } shipFrames := createSpriteSheet(spritesheet, 256, 256) player := pixel.NewSprite(spritesheet, shipFrames[0]) angle := 0.0 last := time.Now() for !win.Closed() { dt := time.Since(last).Seconds() last = time.Now() win.Clear(colornames.Whitesmoke) mat := pixel.IM mat = mat.Rotated(pixel.ZV, angle) mat = mat.Scaled(pixel.ZV, 0.25).Moved(win.Bounds().Center()) player.Draw(win, mat) if win.Pressed(pixelgl.KeyLeft) { angle += 3 * dt } if win.Pressed(pixelgl.KeyRight) { angle -= 3 * dt } win.Update() } } func main() { pixelgl.Run(run) }