Java Swing游戏开发学习15

内容来自RyiSnow视频讲解

这一节讲的是Title Screen,直译:标题屏幕。视频开始没有字幕了,比较考验听力[/doge]🐶,常听到不认识的单词,一边猜,一边琢磨意思。作者说有许多人讨论如何实现non-gameplay screens,非游戏中状态的屏幕,因此添加了此讲解。

前言

Title Screen标题屏幕这里的意思,是指游戏开始前的一屏画面,一般这里可以选择玩家数量,选择游戏难度,做一些自定义的设置之类的操作。就比如魂斗罗、坦克大战开始游戏前的那个页面。像下面图这样的。
在这里插入图片描述

最终效果

在这里插入图片描述
w光标向上选择,按s光标向下,按Enter选中当前菜单项。
为了尽量实现和作者相似的效果,特地去网上下载了一个像素字体文件。

实现

添加新的Game State

Title State;
在GamePanel中的paintComponent方法中处理不同状态的绘制,titleState作为一个分支处理,其他进入游戏后的状态作为一个分支处理。

标题

标题的字体尺寸最大,顶部居中,作者还实现了一个阴影,看起来比较有立体感。

// title name
g2.setFont(g2.getFont().deriveFont(Font.BOLD, 56F));
String text = "Blue Boy Adventure";
int x = getXforCenteredText(text);
int y = gp.tileSize * 2;

// shadow
g2.setColor(Color.gray);
g2.drawString(text, x+5, y+5);

// main color
g2.setColor(Color.white);
g2.drawString(text, x, y);

图片

图片使用的玩家的一张图片,需要注意的是,图片的宽高要像等,数值推荐为16的整数倍,这样比较美观,因为原始图片的尺寸16x16的。
g2.drawImage(gp.player.down1, x, y, gp.tileSize * 2, gp.tileSize * 2, null);

菜单

目前有3项,第二项尚未实现。

New Game开始新游戏
Load Game载入存档
Exit退出游戏

光标

通过w, s按键交互实现光标在菜单中上下移动,Enter键选中菜单,执行对应的操作。

public class KeyHandler {
	@Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();

        // title state
        if (gp.gameState == gp.titleState) {
            if (code == KeyEvent.VK_W) {
                gp.ui.commandNum--;
                if (gp.ui.commandNum < 0) {
                    gp.ui.commandNum = 2;
                }
            }
            if (code == KeyEvent.VK_S) {
                gp.ui.commandNum++;
                if (gp.ui.commandNum > 2) {
                    gp.ui.commandNum = 0;
                }
            }
            if (code == KeyEvent.VK_ENTER) {
                if (gp.ui.commandNum == 0) {
                    gp.gameState = gp.playState;
                    gp.playMusic(0);
                }
                if (gp.ui.commandNum == 1) {
                    // add this later
                }
                if (gp.ui.commandNum == 2) {
                    System.exit(0);
                }
            }
        }
        //.......
    }
}

延伸

有了上述的例子,可以根据需要实现更多。

Character making screen角色制作屏幕
Control guide screen控制向导屏幕
Intro story screen故事讲述屏幕
etc…等等

Character class secection sample screen角色类别选择示例

  角色类别选择示例屏幕,就好比一般的RPG游戏,玩家登录后可以同时创建多个角色,每个角色选择不同的职业,这样可以在游戏中体验不同职业的角色玩法。

  道理是一致的,这里的选择是纯文字实现效果。
在这里插入图片描述

感悟

从开始到现在看了十几个视频了,作者的讲解很详细、很基础,很适合入门,讲解也很细节,但是发现作者有一个缺点,就是代码中有些地方明明应该用if,else if的地方,作者却常常不加else,虽然说有些地方,这样写并不影响逻辑的执行,可是有一些地方却有影响,甚至出现bug,即便没有bug,也会造成不必要的逻辑判断。这一点得注意。

  在最后这个示例里面,作者就因为不加else出现了bug,当选择New Game后,由于没加else,游戏继续执行后面的if判断,结果预期应该是进入角色选择页面,却因为前面的if条件体变量赋值,导致接下来的if直接为true,于是提前进入了游戏,而没有进入类别选择页面。

代码

参考第6篇文章最后,可以使用git clone或直接下载获得完整项目

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地理数据表达方式学习——KML与SHP

一、KML-Keyhole Markup Language Keyhole Markup Language (KML)是一种XML符号&#xff0c;用于浏览器中二维地图和三维地球的地理注释和地理可视化&#xff08;地理数据包括点、线、面、多边形、多面体以及模型等&#xff09;。KML是伴随着Google Earth的使用而开发的&#x…

ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

文章目录 ROS机器人入门第一课&#xff1a;ROS快速体验——python实现HelloWorld一、HelloWorld实现简介&#xff08;一&#xff09;创建工作空间并初始化&#xff08;二&#xff09;进入 src 创建 ros 包并添加依赖 二、HelloWorld(Python版)&#xff08;二&#xff09;进入 r…

Doris实战——工商信息查询平台的湖仓一体建设

目录 前言 一、架构1.0&#xff1a;传统Lambda架构 二、OLAP引擎调研 三、架构2.0&#xff1a;数据服务层All in Apache Doris 四、架构 3.0&#xff1a;基于Doris Multi-Catalog的湖仓一体架构 五、实践经验 5.1 引入Merge-on-Write&#xff0c;百亿级单表查询提速近三…

好用的客服快捷回复软件推荐

在当今快节奏的商业环境中&#xff0c;客户服务的效率和质量已经成为企业成功的关键因素之一。对于客服工作人员来说&#xff0c;面对海量的客户咨询和问题解答&#xff0c;如何快速而准确地回复&#xff0c;成为了他们日常工作中的一大挑战。选择一款好用的快捷回复工具是非常…

如何做人才运营战略?

招聘人才和人才获取是同义词&#xff0c;但它们并不相同。招聘是大多数雇主的短期解决方案&#xff0c;而人才获取是一个长期解决方案。 企业要想改善企业文化朝着统一的愿景努力&#xff0c;就需要关注长期规划。 人才获取vs人才招聘 招聘是为了填补空缺&#xff0c;人才获取…

“人工智能+”平台能力,如何助力企业打造新质生产力?

导读&#xff1a;打造新质生产力&#xff0c;为什么离不开强大的数智平台&#xff1f; 2024年开年&#xff0c;新质生产力成为经济领域的第一热词。 提到新质生产力&#xff0c;很多人会想到以人工智能为代表的科技创新。2024年政府工作报告提出&#xff1a;要“深化大数据、人…

C# 异常捕获

文章目录 C# 异常捕获捕获异常运行效果 自定义异常运行结果 抛出异常 C# 异常捕获 捕获异常 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp2 {class Test{int result;Test(){r…

力扣Lc20--- 202.快乐数(java版)-2024年3月20日

1.题目 2.知识点 &#xff08;1&#xff09;while (seen.contains(n) false) { // 循环体 } 与 !seen.contains(n) 等同 &#xff08;2&#xff09; 当传入数字 19 给 isHappy(19) 方法时&#xff0c;下面是每一行代码的执行过程&#xff1a; 初始化一个空的 HashSet&#…

元宇宙:数字化世界的下一个时代

元宇宙&#xff08;Metaverse&#xff09;概念是一个3D平台&#xff0c;作为用户可以参与不断成熟的虚拟世界&#xff0c;元宇宙应该被视为互联网发展的延续&#xff0c;以用户为中心。因为在这个三维虚拟平台上&#xff0c;我们都可以结识其他人、玩游戏、购物或工作。设想一个…

栈和队列的学习

存储方式分两类&#xff1a;顺序存储和链式存储 栈&#xff1a;只允许从一端进行数据插入和删除的线性表&#xff1a;先进后出 FILO 队列&#xff1a;只允许从一端进行数据插入&#xff0c;另一端进行数据删除的线性表&#xff1a;先进先出 FIFO 栈 创建空栈&#xff0c;创建…

【漏洞复现】WordPress Plugin NotificationX 存在sql注入CVE-2024-1698

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin NotificationX 存在安全漏洞,该漏洞源于对用户提供的…

【skimage包如何安装】

【skimage包如何安装】 直接安装pip install scikit-image&#xff0c;而不是安装pip install skimage pip install scikit-image

【深度学习】基于机器学习的无机钙钛矿材料形成能预测,预测形成能,神经网络,回归问题

文章目录 任务分析数据处理处理离散数值处理缺失值处理不同范围的数据其他注意事项 我们的数据处理模型训练网页web代码、指导 任务分析 简单来说&#xff0c;就是一行就是一个样本&#xff0c;要用绿色的9个数值&#xff0c;预测出红色的那1个数值。 数据处理 在进行深度数…

从IO操作与多线程的思考到Redis-6.0

IO操作->线程阻塞->释放CPU资源->多线程技术提升CPU利用率 在没有涉及磁盘操作和网络请求的程序中&#xff0c;通常不会出现线程等待状态。线程等待状态通常是由于线程需要等待某些事件的发生&#xff0c;比如I/O操作完成、网络请求返回等。如果程序只是进行计算或者简…

低代码开发平台开源:依靠科技力量实现数字化转型!

在竞争激烈的当今社会&#xff0c;数字化转型、流程化办公等字眼早已充斥在我们的职场生活中。虽然如此&#xff0c;但是我们依然要面临着这样一个现实问题&#xff1a;很多中小企业发展面临着资源有限、技术储备不足、人才短缺的现实问题&#xff0c;进入流程化办公困境依然明…

JSP基础知识

前言&#xff1a;开发需要&#xff0c;有一个老项目&#xff0c;使用的是前后端不分离的框架&#xff0c;前端使用的JSP开发&#xff0c;于是需要恶补JSP的基础知识和语法。以下是学习过程总结的一些有用的基础知识。 推荐学习&#xff1a; JSP 语法 | 菜鸟教程 简介 Jsp是一…

Mybatis总结(持续补充),kafka和mq的区别面试

配置环境&#xff1a;需要引入Mybatis的一个jar包 然后写一个mybatis-config.xml的配置文件里面写着mybatis的核心配置文件&#xff0c;例如&#xff1a;连接的哪个数据库&#xff0c;资源文件的注册&#xff08;Mapper.xml等&#xff09; 书写一个MybatsiUtils工具类封装一个…

Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)(A,B,C,D,E,F)

比赛链接 这场。。。好像已经是一周之前的比赛来着&#xff0c;终于补完了。 C是个披着字符串外衣的数学容斥题。D是个超级超级暴力的爆搜&#xff0c;写起来超级麻烦&#xff0c;感觉。。。真是一次酣畅淋漓的赤石。E是个DP&#xff0c;朴素想法其实比较直观&#xff0c;不过…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

了解Kafka位移自动提交的秘密:避免常见陷阱的方法

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Kafka位移自动提交的秘密&#xff1a;避免常见陷阱的方法 前言位移自动提交简介自动提交的优缺点自动提交位移的优点&#xff1a;自动提交位移的缺点&#xff1a;自动提交与手动提交的对比分析&am…