使用Golang和Ebiten引擎开发的开源双摇杆射击游戏《Carotid Artillery》

使用Golang和Ebiten引擎开发的开源双摇杆射击游戏《Carotid Artillery》 你被困在一个地牢中,这里爬满了渴望将你作为晚餐的吸血鬼。通过在一夜之间吃掉比你一生都多的大蒜来击退恶魔。

代码:tslocum/carotidartillery: Twin-stick shooter - carotidartillery - Rocket Nine Labs

试玩:Rate Carotid Artillery by rocketnine for Vampire Themed Game Jam - October 2021 - itch.io


更多关于使用Golang和Ebiten引擎开发的开源双摇杆射击游戏《Carotid Artillery》的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

我非常喜欢Ebiten项目,很高兴看到人们在使用它。我刚试玩了游戏,它在浏览器中运行得非常流畅。干得漂亮!

更多关于使用Golang和Ebiten引擎开发的开源双摇杆射击游戏《Carotid Artillery》的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢Yehor,

我刚才在我的机器上尝试运行了这个命令,一个二进制文件被保存到了 ~/go/bin/carotidartillery

请尝试运行以下命令,在编译时打印详细信息:

go install -x code.rocketnine.space/tslocum/carotidartillery@latest

如果你仍然没有发现任何异常,请确保 GOBIN 与你正在检查的文件夹匹配:

go env

你好,@tslocum

刚刚玩完这个游戏。 它的外观和感觉令人印象深刻!

我尝试在本地安装它,但似乎有些问题。我使用的是 Go 1.16.2,下面的命令不起作用:

go install code.rocketnine.space/tslocum/carotidartillery@latest

我没有看到任何错误,并且二进制文件没有出现在 GOBIN 文件夹中。 也许我可以启用详细模式来查看二进制文件可能在哪里?

对第一条命令的响应是:

yehor@desktop:~$ go install -x code.rocketnine.space/tslocum/carotidartillery@latest
# get https://proxy.golang.org/code.rocketnine.space/@v/list
# get https://proxy.golang.org/code.rocketnine.space/tslocum/carotidartillery/@v/list
# get https://proxy.golang.org/code.rocketnine.space/tslocum/@v/list
# get https://proxy.golang.org/code.rocketnine.space/tslocum/carotidartillery/@v/list: 200 OK (0.320s)
# get https://proxy.golang.org/code.rocketnine.space/tslocum/carotidartillery/@latest
# get https://proxy.golang.org/code.rocketnine.space/tslocum/carotidartillery/@latest: 200 OK (0.040s)
# get https://proxy.golang.org/code.rocketnine.space/tslocum/@v/list: 410 Gone (2.674s)
# get https://proxy.golang.org/code.rocketnine.space/@v/list: 410 Gone (2.675s)
//go:build comment without // +build comment

我使用的是 go1.16.2,可能这个版本对这个程序来说太旧了?

这是一个使用Ebiten引擎开发的优秀双摇杆射击游戏示例。以下是代码仓库中值得关注的技术实现:

// 游戏主循环结构
type Game struct {
    player    *Player
    enemies   []*Enemy
    bullets   []*Bullet
    input     *Input
    camera    *Camera
}

// 输入处理示例
func (g *Game) Update() error {
    // 双摇杆控制:左摇杆移动,右摇杆射击
    g.player.Move(g.input.Movement())
    if g.input.Shooting() {
        bullet := g.player.Shoot(g.input.AimDirection())
        g.bullets = append(g.bullets, bullet)
    }
    
    // 敌人AI更新
    for _, enemy := range g.enemies {
        enemy.Update(g.player.Position())
    }
    
    // 碰撞检测
    g.checkCollisions()
    
    return nil
}

// 渲染示例
func (g *Game) Draw(screen *ebiten.Image) {
    // 相机变换
    op := &ebiten.DrawImageOptions{}
    op.GeoM.Translate(-g.camera.X, -g.camera.Y)
    
    // 渲染游戏对象
    g.player.Draw(screen, op)
    for _, enemy := range g.enemies {
        enemy.Draw(screen, op)
    }
    for _, bullet := range g.bullets {
        bullet.Draw(screen, op)
    }
}

// 敌人AI实现
func (e *Enemy) Update(targetPos vector2d) {
    // 寻路逻辑:向玩家移动
    direction := targetPos.Sub(e.position).Normalize()
    e.position = e.position.Add(direction.Scale(e.speed))
    
    // 攻击逻辑
    if e.CanAttack() {
        e.Attack()
    }
}

游戏的关键特性包括:

  1. 流畅的双摇杆控制实现
  2. 基于Ebiten的高性能2D渲染
  3. 敌人AI的寻路和攻击逻辑
  4. 碰撞检测系统
  5. 相机跟随和视口管理

代码结构清晰,遵循了Ebiten的最佳实践,是学习游戏开发的良好参考。

回到顶部