astercal/main.go

75 lines
1.5 KiB
Go
Raw Normal View History

2018-01-16 22:57:14 -07:00
// 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)
}