当前位置: 首页 > news >正文

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` 的集合中的操作。

具体解释如下:

  1. `Run_L` 是一个集合对象,是`ArrayList`实现了接口的类的实例。它用于存储 `BufferedImage` 对象或其他类型的元素。
  2. `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来优化前端性能?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…...

JAVA SE -- 第十五天

&#xff08;全部来自“韩顺平教育”&#xff09; 多线程 一、线程相关概念 1、程序&#xff1a;是为完成特定任务、用某种语言编写的一组指令的集合。 2、进程&#xff1a;是指运行中的程序&#xff0c;如QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程…...

macOS 环境变量加载探究

使用 macOS 安装环境&#xff0c;见到过很数种环境变量配置方法&#xff0c;每次也都是按照别人的代码&#xff0c;人家配置在哪 我就配置在哪&#xff0c;其实不太清楚有什么区别&#xff0c;决定记录下。 本机 macOS 13.3&#xff0c;从 macOS Catalina(10.15) 开始&#xf…...

在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值

std::thread::id() 是std::thread::id的默认构造函数&#xff0c;它会创建一个空的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 */ // 计算实际音频缓冲大小&#xff0c;并不需要太频繁…...

⛳ 多线程面试-什么是多线程上下文切换?

目录 ⛳ 多线程面试&#xff0d;什么是多线程上下文切换&#xff1f;&#x1f381; Java中用到的线程调度算法是什么&#xff1f;&#x1f3a8; 什么是线程饥饿 &#xff1f;你对线程优先级的理解是什么&#xff1f; ⛳ 多线程面试&#xff0d;什么是多线程上下文切换&#xff…...

vb+SQL车辆管理系统设计与实现

摘 要 随着信息时代的到来,信息高速公路的兴起,全球信息化进入了一个新的发展时期。人们越来越认识到计算机强大的信息模块处理功能,使之成为信息产业的基础和支柱。 我国经济的快速发展,汽车已经成为人们不可缺少的交通工具。对于拥有大量车辆的机关企事业来说,车辆的…...

java的枚举类

枚举类的概念和使用 1.枚举类的理解&#xff1a;类的对象只有有限个&#xff0c;确定的。我们称此为枚举类。 2.当需要定义一组常量时&#xff0c;强烈建议使用枚举类。对象便是所指的常量。 3.如果枚举类中只有一个对象&#xff0c;则可以作为单例模式的实现方式。 定义枚举类…...

基于java早餐店点餐系统源码设计与实现

摘 要 多姿多彩的世界带来了美好的生活&#xff0c;行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面&#xff0c;信息技术至始至终都是成就行业发展的重要秘密。不论何种行业&#xff0c;大到国家、企业&#xff0c;小到团体、个人都在多方位的结合信息化技…...

ODOO16如何处理采购运输正常损耗的成本价核算?

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

【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 白鲸优化算法BWO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 白鲸…...

函数式编程-将过程作为返回值的应用:分步过程

之前的文章提到函数式编程的一等函数&#xff08;First-class Function&#xff09;四个性质中有“可以将过程作为返回值”这一点&#xff0c;但这一点在实际使用中不如“将过程作为参数”&#xff08;高阶函数&#xff09;用得多。本文介绍一种这个性质用于分步函数的应用。 …...

Mysql-学习笔记

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

【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…...

Windows用户如何安装新版本cpolar内网穿透

Windows用户如何安装新版本cpolar内网穿透 文章目录 Windows用户如何安装新版本cpolar内网穿透 在科学技术高度发达的今天&#xff0c;我们身边充斥着各种电子产品&#xff0c;这些电子产品不仅为我们的工作带来极大的便利&#xff0c;也让生活变得丰富多彩。我们可以使用便携的…...

MacBookPro安装Win10,Wifi不能用了,触控板不能用了(2)

一、问题 去年在MacBookPro上装过Win10&#xff0c;当初只分配了60G空间。各方面原因需要重装系统&#xff0c;上个月装了一晚上&#xff0c;也无法连接Wifi&#xff0c;触控板只能当鼠标左键用。 后来发现是没有相关驱动造成的&#xff0c;于是从Mac系统联网找到网卡驱动&am…...

理解C++中变量的作用域

理解C中变量的作用域 常规变量&#xff08;如前面定义的所有变量&#xff09;的作用域很明确&#xff0c;只能在作用域内使用它们&#xff0c;如果您在作用域外使用它们&#xff0c;编译器将无法识别&#xff0c;导致程序无法通过编译。在作用域外面&#xff0c;变量是未定义的…...

vue+element-ui给全局请求设置一个loading样式

老项目后台管理&#xff0c;要在每个页面请求的时候都添加一个loading&#xff0c;为了统一和防止一个页面多次请求页面出现闪烁的情况同意在request.js中添加了一个全局loading。 想要的效果&#xff1a; 1.在请求的时候创建一个loading样式&#xff0c;请求结束是关闭。 2…...

传球游戏

题目描述 上体育课的时候&#xff0c;小蛮的老师经常带着同学们一起做游戏。这次&#xff0c;老师带着同学们一起做传球游戏。 游戏规则是这样的&#xff1a;n个同学站成一个圆圈&#xff0c;其中的一个同学手里拿着一个球&#xff0c;当老师吹哨子时开始传球&#xff0c;每个…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...