package gameobjects import ( "github.com/faiface/pixel" "github.com/faiface/pixel/pixelgl" //"fmt" ) type Player struct { X, Y float64 PlayerVec pixel.Vec sprFrame int spriteSheet pixel.Picture sprFrames []pixel.Rect sprite *pixel.Sprite speed float64 } func NewPlayer(win *pixelgl.Window, spriteSheet pixel.Picture) (*Player){ var p *Player p.X = win.Bounds().Max.X/2 p.Y = win.Bounds().Max.Y/2 p.PlayerVec = pixel.Vec{ X:win.Bounds().Max.X/2, Y:win.Bounds().Max.Y/2, } p.sprFrame = 9 p.spriteSheet = spriteSheet p.sprFrames = createSpriteFrames(spriteSheet) p.sprite = pixel.NewSprite(spriteSheet, p.sprFrames[p.sprFrame]) p.speed = 10.0 return p } func (p *Player) Update(win *pixelgl.Window, dt int64) { speed := p.speed if win.Pressed(pixelgl.KeyA) { //left p.sprFrame = 6 p.X -= speed } if win.Pressed(pixelgl.KeyD) { //Right p.sprFrame = 3 p.X += speed } if win.Pressed(pixelgl.KeyS) { //Down p.sprFrame = 9 p.Y -= speed } if win.Pressed(pixelgl.KeyW) { //up p.sprFrame = 0 p.Y += speed } p.sprite.Set(p.spriteSheet, p.sprFrames[p.sprFrame]) //p.PlayerVec.X += vecX //p.PlayerVec.Y += vecY p.PlayerVec = pixel.Vec { X: p.X, Y: p.Y, } //fmt.Println(p.PlayerVec.X,p.PlayerVec.Y) } func (p *Player) Render(win *pixelgl.Window) { //include batch later p.sprite.Draw(win, pixel.IM.Scaled(pixel.ZV, 4).Moved(p.PlayerVec)) } func createSpriteFrames(spriteSheet pixel.Picture) ([]pixel.Rect) { var sprFrames []pixel.Rect var frameHeight, frameWidth float64 = 96, 96 for y := spriteSheet.Bounds().Min.Y; y < frameHeight*4; y += 96 { for x := spriteSheet.Bounds().Min.X; x < frameWidth*3; x += 96 { sprFrames = append(sprFrames, pixel.R(x, y, x+96, y+96)) // (x, y, width, height) of frame } } return sprFrames }