使用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
我非常喜欢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()
}
}
游戏的关键特性包括:
- 流畅的双摇杆控制实现
- 基于Ebiten的高性能2D渲染
- 敌人AI的寻路和攻击逻辑
- 碰撞检测系统
- 相机跟随和视口管理
代码结构清晰,遵循了Ebiten的最佳实践,是学习游戏开发的良好参考。

