首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang语言情怀--第140期 Go语言Ebiten引擎《荒野坦克大战》开发:游客功能UI完成

Golang语言情怀--第140期 Go语言Ebiten引擎《荒野坦克大战》开发:游客功能UI完成

作者头像
李海彬
发布2024-11-15 10:50:45
发布2024-11-15 10:50:45
25300
代码可运行
举报
文章被收录于专栏:Golang语言社区Golang语言社区
运行总次数:0
代码可运行

Ebiten框架开发《荒野坦克大战》PC版本

PC版本规划如下:

  1. 移植移动端所有功能,打通移动和PC端同服。
  2. 支持手柄、键盘操作(1.0.0版本只支持手柄)游戏角色。
  3. 完善游戏帧同步机制。

本节主要是完成:游客登录 涉及到的知识点,主要是按钮,背景相关。 以下代码是个按钮实例,大家可以简单看下:

代码语言:javascript
代码运行次数:0
运行
复制
func NewGame() *Game {
    g := &Game{}
    g.button1 = &Button{
        Rect: image.Rect(567, 567, 695, 599), //按钮的位置和坐标,可以调整位置!
        Text: `Guest login`,
    }
    g.button1.SetOnPressed(func(b *Button) {
        g.textBoxLog.AppendLine("Button 1 Pressed")
    })
    return g
}

游客功能-登录按钮解析

代码语言:javascript
代码运行次数:0
运行
复制
g.button1 = &Button{
        Rect: image.Rect(567, 567, 695, 599), //按钮的位置和坐标,可以调整位置!
        Text: `Guest login`,
    }

其中,按钮的位置坐标及大小:

代码语言:javascript
代码运行次数:0
运行
复制
Rect: image.Rect(567, 567, 695, 599), //按钮的位置和坐标,可以调整位置!

目前完成了按钮的UI,下节我们来调整下点击事件后,和登录服务器链接;后续会涉及到网络编程。主要是http、websocoket、rpc.


下面给大家分享一个另外的Ebitengine引擎的按钮点击实例,效果如下:


代码语言:javascript
代码运行次数:0
运行
复制
// Copyright 2018 Hajime Hoshi
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

import (
    "fmt"
    "image"

    "github.com/hajimehoshi/ebiten"

    "github.com/hajimehoshi/ebitenui"
    "github.com/hajimehoshi/ebitenui/layout"
)

type App struct {
    root  *ebitenui.Widget
    root1 *ebitenui.Button
}

func (a *App) Update(screen *ebiten.Image) error {

    a.root.Update()

    if ebiten.IsRunningSlowly() {
        return nil
    }

    a.root.Draw(screen)

    return nil
}

func main() {

    // 创建整体的区域大小
    app := &App{
        root: ebitenui.NewWidget(nil),
    }
    app.root.Resize(image.Rect(0, 0, 640, 480))
    //------------------------------------------------------------------------------------------------------------------
    // 创建面板
    panel := ebitenui.NewWidget(&ebitenui.Panel{})
    panel.Resize(image.Rect(30, 30, 300, 200))
    //------------------------------------------------------------------------------------------------------------------
    // 创建按钮的区域
    button := ebitenui.NewWidget(&ebitenui.Button{
        OnClick: func() {
            fmt.Println("Button Click")
        },
        OnMouseDown: func() {
            fmt.Println("Button MouseDown")
        },
        OnMouseUp: func() {
            fmt.Println("Button MouseUp")
        },
    })
    button.Resize(image.Rect(400, 400, 460, 460))
    //------------------------------------------------------------------------------------------------------------------
    // 面板中增加按钮
    panel.AddChild(button, image.Rect(0, 0, layout.MaxAnchor, layout.MaxAnchor))
    // 全部增加到整体上
    app.root.AddChild(panel, image.Rect(0, 0, layout.MaxAnchor, layout.MaxAnchor))
    //------------------------------------------------------------------------------------------------------------------
    if err := ebiten.Run(app.Update, 640, 480, 1, "UI Example"); err != nil {
        panic(err)
    }
}

本节就暂时到这里,明天继续EbitEngine编程。

社区自己开发的IO小游戏,欢迎体验:

同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!


参考资料:

Go语言中文文档

http://www.golang.ltd/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ebiten框架开发《荒野坦克大战》PC版本
  • 游客功能-登录按钮解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档