Java超级玛丽小游戏制作过程讲解 第四天 创建并完成常量类03

今天继续来完成常量类。

java 复制代码
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`对象。

java 复制代码
//初始化方法
    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`集合中。

最后,再通过一个循环加载了马里奥向右跑的图片资源,与加载向左跑的图片资源类似。

如果在加载图片过程中发生异常,将会打印异常信息。

这段代码依赖于文件系统中的图片文件,确保文件位置正确且文件存在。

java 复制代码
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`对象。

  1. 执行`ImageIO.read(new File(path + "bg.png"))`会加载指定路径下的"bg.png"图片,并将它转换为`BufferedImage`对象。

  2. 最后,将得到的`BufferedImage`对象赋值给变量`bg`,以便后续使用。

java 复制代码
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

相关推荐
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen3 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
没有bug.的程序员4 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~4 小时前
《设计模式》装饰模式
java·设计模式
A尘埃4 小时前
企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
java·金融·政务·智能客服系统
青云交5 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
CHEN5_025 小时前
【Java基础面试题】Java基础概念
java·开发语言