Java超级玛丽小游戏制作过程讲解 第四天 创建并完成常量类03
今天继续来完成常量类。
package com.sxt;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class StaticValue {//背景public static BufferedImage bg=null;public static BufferedImage bg2=null;//马里奥向左跳跃public static BufferedImage jump_L=null;//马里奥向右跳跃public static BufferedImage jump_R=null;//马里奥向左站立public static BufferedImage stand_L=null;//马里奥向右站立public static BufferedImage stand_R=null;//城堡public static BufferedImage tower=null;//旗杆public static BufferedImage gan=null;//障碍物public static List<BufferedImage> obstacle = new ArrayList<>();//马里奥向左跑的图片public static List<BufferedImage> Run_L = new ArrayList<>();//马里奥向右跑的图片public static List<BufferedImage> Run_R = new ArrayList<>();//蘑菇敌人public static List<BufferedImage> mogu = new ArrayList<>();//食人花敌人public static List<BufferedImage> flower = new ArrayList<>();//路径的前缀public static String path = System.getProperty("use.dir")+"/src/images/";//初始化方法public void init(){try {//背景图片bg = ImageIO.read(new File(path + "bg.png"));bg2 = ImageIO.read(new File(path + "bg.png"));//加载马里奥向左/右站立stand_L = ImageIO.read(new File(path+"s_mario_stand_L.png"));stand_R = ImageIO.read(new File(path+"s_mario_stand_R.png"));//加载城堡tower=ImageIO.read(new File(path+"tower.png"));//加载旗杆gan=ImageIO.read(new File(path+"gan.png"));//加载马里奥向左/右跳跃jump_L=ImageIO.read(new File(path+"s_mario_jump1_L.png"));jump_R=ImageIO.read(new File(path+"s_mario_jump1_R.png"));}catch(Exception a){a.printStackTrace();}//加载马里奥向左跑,因为有两张图,所以用for循环for(int i =1;i<=2;i++){try{Run_L.add(ImageIO.read(new File(path+"s_mario_run"+i+"_L.png")));}catch(IOException a){a.printStackTrace();}}//加载马里奥向右跑,因为有两张图,所以用for循环for(int i =1;i<=2;i++){try{Run_R.add(ImageIO.read(new File(path+"s_mario_run"+i+"_R.png")));}catch(IOException a){a.printStackTrace();}}}}
这段代码是一个初始化方法,用于加载一些图片资源。在这段代码中,主要使用了`ImageIO.read(File file)`方法加载图片文件并将其转换为`BufferedImage`对象。
//初始化方法public void init(){try {//背景图片bg = ImageIO.read(new File(path + "bg.png"));bg2 = ImageIO.read(new File(path + "bg.png"));//加载马里奥向左/右站立stand_L = ImageIO.read(new File(path+"s_mario_stand_L.png"));stand_R = ImageIO.read(new File(path+"s_mario_stand_R.png"));//加载城堡tower=ImageIO.read(new File(path+"tower.png"));//加载旗杆gan=ImageIO.read(new File(path+"gan.png"));//加载马里奥向左/右跳跃jump_L=ImageIO.read(new File(path+"s_mario_jump1_L.png"));jump_R=ImageIO.read(new File(path+"s_mario_jump1_R.png"));}catch(Exception a){a.printStackTrace();}//加载马里奥向左跑,因为有两张图,所以用for循环for(int i =1;i<=2;i++){try{Run_L.add(ImageIO.read(new File(path+"s_mario_run"+i+"_L.png")));}catch(IOException a){a.printStackTrace();}}//加载马里奥向右跑,因为有两张图,所以用for循环for(int i =1;i<=2;i++){try{Run_R.add(ImageIO.read(new File(path+"s_mario_run"+i+"_R.png")));}catch(IOException a){a.printStackTrace();}}}
首先,通过`ImageIO.read(new File(path + "bg.png"))`加载了名为"bg.png"的背景图片,并将其赋值给变量`bg`和`bg2`。接着,加载了一些其他图片资源,
如"stand_L.png"、"stand_R.png"、"tower.png"、"gan.png"、"jump_L.png"和"jump_R.png",并分别赋值给相应的变量。
然后,通过一个循环加载了马里奥向左跑的图片资源。在循环中,使用`ImageIO.read(new File(path+"s_mario_run"+i+"_L.png"))`加载了名字格式为"s_mario_run1_L.png"和"s_mario_run2_L.png"的两张图片,并将它们添加到`Run_L`集合中。
最后,再通过一个循环加载了马里奥向右跑的图片资源,与加载向左跑的图片资源类似。
如果在加载图片过程中发生异常,将会打印异常信息。
这段代码依赖于文件系统中的图片文件,确保文件位置正确且文件存在。
bg = ImageIO.read(new File(path + "bg.png"));
这行代码的作用是加载名为"bg.png"的背景图片,并将其转换为`BufferedImage`对象并赋值给变量`bg`。
具体解释如下:
1. `path`是一个表示文件路径的字符串变量,它指定了图片文件所在的目录路径。
2. `File(path + "bg.png")`创建了一个`File`对象,表示图片文件的路径和名称。通过将`path`和"bg.png"拼接起来,得到完整的图片文件路径。
3. `ImageIO.read(file)`是一个静态方法,用于读取指定文件并将其转换为`BufferedImage`对象。
- `ImageIO`是Java API中的一个类,提供了一些静态方法用于操作图像。
- `read(file)`是`ImageIO`类的一个静态方法,用于读取指定文件并返回一个`BufferedImage`对象。
4. 执行`ImageIO.read(new File(path + "bg.png"))`会加载指定路径下的"bg.png"图片,并将它转换为`BufferedImage`对象。
5. 最后,将得到的`BufferedImage`对象赋值给变量`bg`,以便后续使用。
Run_L.add(ImageIO.read(new File(path+"s_mario_run"+i+"_L.png")));
`Run_L.add(...)` 是将一个对象添加到名为 `Run_L` 的集合中的操作。
具体解释如下:
- `Run_L` 是一个集合对象,是`ArrayList`实现了接口的类的实例。它用于存储 `BufferedImage` 对象或其他类型的元素。
- `add(...)` 是 `Collection` 接口定义的方法之一,用于将一个元素添加到集合中。
3. 在这个代码片段中,`...` 表示要添加的元素对象(即 `BufferedImage` 对象)。
4. 执行 `Run_L.add(...)` 操作后,这个元素对象会被添加到 `Run_L` 集合的末尾。
总结起来,`Run_L.add(...)` 的作用是将一个对象添加到名为 `Run_L` 的集合中,用于存储马里奥向左跑动作的图片对象。
声明:小游戏源码来自b站视频(up:编程学习会员Q),本文仅根据源码做知识性补充与注解。如存在不当使用的情况,请随时联系删除。
http://【【Java项目】不到两小时用Java做出超级玛丽小游戏_手把手教你开发游戏_超详细保姆级教程_Java编程_Java游戏开发-Java基础-Java练手项目】https://www.bilibili.com/video/BV1DZ4y1Y73M?p=5&vd_source=70e680aaeedc45cb797fd52fdd25367c
相关文章:
Java超级玛丽小游戏制作过程讲解 第四天 创建并完成常量类03
今天继续来完成常量类。 package com.sxt;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List;public class StaticValue {//背景public static Buff…...

webpack基础知识八:说说如何借助webpack来优化前端性能?
一、背景 随着前端的项目逐渐扩大,必然会带来的一个问题就是性能 尤其在大型复杂的项目中,前端业务可能因为一个小小的数据依赖,导致整个页面卡顿甚至奔溃 一般项目在完成后,会通过webpack进行打包,利用webpack对前…...

JAVA SE -- 第十五天
(全部来自“韩顺平教育”) 多线程 一、线程相关概念 1、程序:是为完成特定任务、用某种语言编写的一组指令的集合。 2、进程:是指运行中的程序,如QQ,就启动了一个进程,操作系统就会为该进程…...

macOS 环境变量加载探究
使用 macOS 安装环境,见到过很数种环境变量配置方法,每次也都是按照别人的代码,人家配置在哪 我就配置在哪,其实不太清楚有什么区别,决定记录下。 本机 macOS 13.3,从 macOS Catalina(10.15) 开始…...
在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值
std::thread::id() 是std::thread::id的默认构造函数,它会创建一个空的std::thread::id对象。一个空的std::thread::id对象代表一个无效的线程标识符。 可以通过 std::thread::id 的成员函数 std::thread::id::operator() 来判断一个 std::thread::id 是否是一个空值…...

ffmpeg-ffplay代码架构简述
全局变量 /* Minimum SDL audio buffer size, in samples. */ // 最小音频缓冲 #define SDL_AUDIO_MIN_BUFFER_SIZE 512 /* Calculate actual buffer size keeping in mind not cause too frequent audio callbacks */ // 计算实际音频缓冲大小,并不需要太频繁…...
⛳ 多线程面试-什么是多线程上下文切换?
目录 ⛳ 多线程面试-什么是多线程上下文切换?🎁 Java中用到的线程调度算法是什么?🎨 什么是线程饥饿 ?你对线程优先级的理解是什么? ⛳ 多线程面试-什么是多线程上下文切换ÿ…...
vb+SQL车辆管理系统设计与实现
摘 要 随着信息时代的到来,信息高速公路的兴起,全球信息化进入了一个新的发展时期。人们越来越认识到计算机强大的信息模块处理功能,使之成为信息产业的基础和支柱。 我国经济的快速发展,汽车已经成为人们不可缺少的交通工具。对于拥有大量车辆的机关企事业来说,车辆的…...
java的枚举类
枚举类的概念和使用 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类。 2.当需要定义一组常量时,强烈建议使用枚举类。对象便是所指的常量。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 定义枚举类…...
基于java早餐店点餐系统源码设计与实现
摘 要 多姿多彩的世界带来了美好的生活,行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面,信息技术至始至终都是成就行业发展的重要秘密。不论何种行业,大到国家、企业,小到团体、个人都在多方位的结合信息化技…...

ODOO16如何处理采购运输正常损耗的成本价核算?
《会计准则》规定:商品流通企业在采购商品过程中发生的运输费、装卸费、运输途中的合理损耗都归为采购存货成本中。 例如:采购A产品1000个,单价10元/个,途中运输正常损耗率是5%,因此实际入库是950个,入库金…...

【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】
文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 白鲸优化算法BWO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 白鲸…...
函数式编程-将过程作为返回值的应用:分步过程
之前的文章提到函数式编程的一等函数(First-class Function)四个性质中有“可以将过程作为返回值”这一点,但这一点在实际使用中不如“将过程作为参数”(高阶函数)用得多。本文介绍一种这个性质用于分步函数的应用。 …...

Mysql-学习笔记
文章目录 1. 数据库1.1 Mysql安装及常用代码1.2 SQL介绍1.3 SQL分类1. DDL-操作数据库,表2. DML-对表中的数据进行增删改3. DQL-对表中的数据进行查询条件查询模糊查询排序查询分组查询分页查询 4. DCL-对数据库进行权限控制外键约束表关系-多对多多表查询事务 1. 数…...

【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块2
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...

Windows用户如何安装新版本cpolar内网穿透
Windows用户如何安装新版本cpolar内网穿透 文章目录 Windows用户如何安装新版本cpolar内网穿透 在科学技术高度发达的今天,我们身边充斥着各种电子产品,这些电子产品不仅为我们的工作带来极大的便利,也让生活变得丰富多彩。我们可以使用便携的…...
MacBookPro安装Win10,Wifi不能用了,触控板不能用了(2)
一、问题 去年在MacBookPro上装过Win10,当初只分配了60G空间。各方面原因需要重装系统,上个月装了一晚上,也无法连接Wifi,触控板只能当鼠标左键用。 后来发现是没有相关驱动造成的,于是从Mac系统联网找到网卡驱动&am…...
理解C++中变量的作用域
理解C中变量的作用域 常规变量(如前面定义的所有变量)的作用域很明确,只能在作用域内使用它们,如果您在作用域外使用它们,编译器将无法识别,导致程序无法通过编译。在作用域外面,变量是未定义的…...
vue+element-ui给全局请求设置一个loading样式
老项目后台管理,要在每个页面请求的时候都添加一个loading,为了统一和防止一个页面多次请求页面出现闪烁的情况同意在request.js中添加了一个全局loading。 想要的效果: 1.在请求的时候创建一个loading样式,请求结束是关闭。 2…...
传球游戏
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...