饥荒Mod 开发(十四):制作屏幕弹窗

饥荒Mod 开发(十三):木牌传送
在上一个文章里面制作了一个传送选择页面,是一个全屏的窗口,那饥荒中如何制作一个全屏的窗口,下面介绍一下如何从零开始制作一个全屏窗口

制作屏幕窗口

饥荒中的全屏窗口都有一个基类 “Screen”,我们需要从这个基类派生一个子类
在widgets 目录下新建一个 myscreen.lua 文件
在这里插入图片描述
下面是一个最简单的 屏幕类的实现

local Screen = require "widgets/screen" -- 引入"widgets/screen"模块
local Widget = require "widgets/widget"
local Image = require "widgets/image"
local TravelScreen = Class(Screen, function(self, homesign, traveller)Screen._ctor(self, "myscreen") -- 构造函数,创建一个名为"myscreen"的屏幕--画一个背景self.root = self:AddChild(Widget("ROOT"))self.root:SetVAnchor(ANCHOR_MIDDLE)self.root:SetHAnchor(ANCHOR_MIDDLE)self.root:SetScaleMode(SCALEMODE_PROPORTIONAL)--添加一个背景self.bg = self.root:AddChild(Image("images/globalpanels.xml", "panel.tex"))self.bg:SetSize(500, 650)self.bg:SetPosition(0, 25)
end)function TravelScreen:Close()TheFrontEnd:PopScreen(self) -- 当取消时,弹出当前屏幕
endreturn TravelScreen -- 返回TravelScreen类

测试弹出页面

监听F3 按键进入游戏 按F3 键,弹出这个页面


local myscreen = GLOBAL.require("widgets/myscreen")
GLOBAL.TheInput:AddKeyHandler(function(key, down)-- 检查按下的键是否是 F1 键if (key == GLOBAL.KEY_F3 and not down) thenlocal screen = TheFrontEnd:GetActiveScreen()-- End if we can't find the screen name (e.g. asleep)if not screen or not screen.name then return true end-- If the hud exists, open the UIif screen.name:find("HUD") then-- We want to pass in the (clientside) player entity         TheFrontEnd:PushScreen(myscreen())return trueelse-- If the screen is already open, close itif screen.name == "myscreen" thenscreen:Close()endendend
end)

效果如下
在这里插入图片描述

增加一个关闭按钮

在myscreen.lua 文件的 ”构造函数”中 添加一个按钮

    -- 添加一个菜单,用来显示关闭self.menu = self.root:AddChild(Menu(nil, 200, true)) -- 在root上添加一个菜单self.menu:SetScale(0.6) -- 设置菜单的缩放比例self.menu:SetPosition(0, -225, 0) -- 设置菜单的位置self.cancelbutton = self.menu:AddItem("关闭", function() -- 在菜单上添加一个名为"关闭"的项,点击后执行self:Close()函数self:Close()end)

在这里插入图片描述

点击关闭按钮会触发 self:Close() 函数调用关闭页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/220035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案 2023/12/18 21:07 一、整体编译Rockchip的的Android12的挖掘机方案! 由于RK3399的Android12系统默认是IND工业方案,需要修改一下【为挖掘机方案】。 Z:\3TB\81rk_android12_220722\…

18.XML

XML简介 • XML–可扩展标记语言 eXtensible Markup Language • 由W3C组织发布,目前推荐遵守的是W3C组织于2000年发布的XML1.0规范 • XML的使命,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务 • XML用来…

The Grid – Responsive WordPress Grid响应式网格插件

点击阅读The Grid – Responsive WordPress Grid响应式网格插件原文 The Grid – Responsive WordPress Grid响应式网格插件是一个高级 wordpress 网格插件,它允许您在完全可定制且响应迅速的网格系统中展示任何自定义帖子类型。 Grid WordPress 非常适合展示您的博…

C++设计模式之——命令模式

命令模式 概念创建步骤示例示例一代码实现运行结果 示例二代码实现运行结果 示例三示例代码运行结果 示例四代码实现运行结果 应用场景 概念 命令模式是一种行为型设计模式,它允许将请求封装为一个对象,从而使得可以参数化客户端请求、将请求排队或者记…

使用opencv的Sobel算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

VMware----基于 VMware 玩转 CentOS 虚拟机创建、克隆以及配置后台运行

查看原文 文章目录 一、安装 Vmware二、创建 CentOS7 系统的虚拟机三、克隆虚拟机四、设置虚拟机后台运行 一、安装 Vmware (1)打开VMware下载地址页面,滑动页面,找到如下界面,点击【下载】 (2&#xff…

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存1)模型训练2)模型保存 4. 模型生成1)模型导入及调用2)相关代码(1)布局文件(2&#xff…

Python 实现:OCR在图片中提取文字(基于Gradio实现)

Paddle OCR PaddleOCR 基于深度学习技术实现的,使用十分简单。 先看效果 可以看出来识别效果还是不错的,里面的“湿”字识别成了繁体字。如果不是连体字,就不会出现这个问题。 1.测试环境 操作系统:Win10 Python:3…

【Linux】dump命令使用

dump命令 dump命令用于备份文件系统。使用dump命令可以检查ext2/3/4文件系统上的文件,并确定哪些文件需要备份。这些文件复制到指定的磁盘、磁带或其他存储介质保管。 语法 dump [选项] [目录|文件系统] bash: dump: 未找到命令... 安装dump yum -y install …

ros2+在Ubuntu上安装gazebo

Binary Installation on Ubuntu(Ubuntu上binary方式安装gazebo) Harmonic binaries are provided for Ubuntu Jammy (22.04) and Ubuntu 24.04 (when its released). (在Ubuntu22.04或者24.04上都是安装Harmonic版本的gazebo)The Harmonic binaries are…

【Stm32-F407】全速DAP仿真器下载程序

文章内容如下: 1) 全速DAP仿真器简介2) 全速DAP仿真器下载程序流程 1) 全速DAP仿真器简介 1)全速DAP仿真器简介 DAP全称 Data Acquisition Processor,是一种用于数据采集和实时控制的设备。本文使用的全速DAP仿真器遵循ARM公司的CMSIS-DAP标准&#xff…

2023-12-18 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

654. 最大二叉树 核心:记住递归三部曲,一般传入的参数的都是题目给好的了!把构造树类似于前序遍历一样就可!就是注意单层递归的逻辑! # Definition for a binary tree node. # class TreeNode: # def __init__(se…

企业微信旧版-新版网络连接错误,无法登录的解决方案

一.企业微微信无法登录故障 二.解决方案 1.网上的解决方案 **检查网络连接:**确保你的计算机正常连接到互联网。尝试打开其他网页,以确保网络连接正常。 **防火墙和安全软件:**某些防火墙或安全软件可能会阻止企业微信的正常连接。请确保你…

MyBatis运行原理和步骤

MyBatis运行原理 MyBatis框架在操作数据库时,大体经过了8个步骤: 1.读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。 2.加载映射文件&…

详解git pull和git fetch的区别

git pull和git fetch的区别, 网上人云亦云胡说八道的实在是太多了,误导我很久。 今天看到一个说得好的,记录一下。 前言 在我们使用git的时候用的更新代码是git fetch,git pull这两条指令。但是有没有小伙伴去思考过这两者的区别呢&#xff…

人工智能原理课后习题(考试相关的)

文章目录 问答题知识表示一阶谓词逻辑表示法语义网络表示法 确定推理谓词公式永真和可满足性内容归结演绎推理 不确定推理主观贝叶斯可信度方法证据理论 搜索策略机器学习 问答题 什么是人工智能? 人工智能就是让机器看起来像人类表现出的智能水平一样 人工智能就是…

十四、YARN核心架构

1、目标 (1)掌握YARN的运行角色和角色之间的关系 (2)理解使用容器做资源分配和隔离 2、核心架构 (1)和HDFS架构的对比 HDFS架构: YARN架构:(主从模式) &…

Qt/C++音视频开发60-坐标拾取/按下鼠标获取矩形区域/转换到视频源真实坐标

一、前言 通过在通道画面上拾取鼠标按下的坐标,然后鼠标移动,直到松开,根据松开的坐标和按下的坐标,绘制一个矩形区域,作为热点或者需要电子放大的区域,拿到这个坐标区域,用途非常多&#xff0…

代码随想录第三十四天(一刷C语言)|不同路径不同路径II

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。 一、不同路径 思路:参考carl文档 机器人每次只能向下或者向右移动一步,机器人走过的路径可以抽象为一棵二叉树,叶子节点就是终点。 1、确定dp数组&#…

使用podman管理容器

目录 1.安装及配置podman 2.镜像的命名 3.对镜像重新做标签 4.删除镜像 5.查看镜像的层结构 6.导出和导入镜像 7.创建容器 8.创建一个简单的容器 9.容器的生命周期 10.创建临时容器 11.指定容器中运行的命令 12.创建容器时使用变量 对于初学者来说,不太容易理…