diff --git a/assets/ship_sprite_sheet.png b/assets/ship_sprite_sheet.png new file mode 100644 index 0000000..b8d4041 Binary files /dev/null and b/assets/ship_sprite_sheet.png differ diff --git a/main.go b/main.go new file mode 100644 index 0000000..20ccff5 --- /dev/null +++ b/main.go @@ -0,0 +1,74 @@ +// main.go +package main + +import ( + "image" + _ "image/png" + "os" + + "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]) + + for !win.Closed() { + //dt := time.Since(last).Seconds() + //last = time.Now() + win.Clear(colornames.Whitesmoke) + + player.Draw(win, pixel.IM.Scaled(pixel.ZV, 0.25).Moved(win.Bounds().Center())) + + win.Update() + } + +} + +func main() { + pixelgl.Run(run) +}