Golang Ebitengine WASD 键

问题描述 投票:0回答:1

如何在golang ebitengine中移动带有wasd键的块,就像在平台上行走的角色一样,就像在Undertale等平台上行走的精灵一样,我正在学习ebitengine,它的文档很糟糕,有人可以帮忙吗?

package main

import (
    "image/color"
    "log"

    "github.com/hajimehoshi/ebiten"
    "github.com/hajimehoshi/ebiten/ebitenutil"
)

const (
    screenWidth  = 640
    screenHeight = 480
    playerSpeed  = 4
    playerSize   = 32
)

type Player struct {
    x, y float64
}

func (p *Player) Update() error {
    if ebiten.IsKeyPressed(ebiten.KeyW) {
        p.y -= playerSpeed
    }
    if ebiten.IsKeyPressed(ebiten.KeyS) {
        p.y += playerSpeed
    }
    if ebiten.IsKeyPressed(ebiten.KeyA) {
        p.x -= playerSpeed
    }
    if ebiten.IsKeyPressed(ebiten.KeyD) {
        p.x += playerSpeed
    }

        p.x = 0
    }
    if p.x > float64(screenWidth-playerSize) {
        p.x = float64(screenWidth - playerSize)
    }
    if p.y < 0 {
        p.y = 0
    }
    if p.y > float64(screenHeight-playerSize) {
        p.y = float64(screenHeight - playerSize)
    }

    return nil
}

func (p *Player) Draw(screen *ebiten.Image) {
    ebitenutil.DrawRect(screen, p.x, p.y, playerSize, playerSize, color.White)
}

func main() {
    if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Ebiten WASD Movement"); err != nil {
        log.Fatal(err)
    }
}

func update(screen *ebiten.Image) error {
    player := &Player{}
    if err := player.Update(); err != nil {
        return err
    }

    if ebiten.IsDrawingSkipped() {
        return nil
    }

    screen.Clear()
    player.Draw(screen)

    return nil
}

就像这个 chatgpt 代码不起作用,它只是卡在一个角落里,块不会去任何地方

go
1个回答
0
投票

完全错误的代码,你不能使用 *ebiten.Image 进行更新??

© www.soinside.com 2019 - 2024. All rights reserved.