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

相关推荐
武昌库里写JAVA6 分钟前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
gaoliheng00614 分钟前
Redis看门狗机制
java·数据库·redis
我是唐青枫16 分钟前
.NET AOT 详解
java·服务器·.net
Su米苏41 分钟前
Axios请求超时重发机制
java
本郡主是喵2 小时前
并发编程 - go版
java·服务器·开发语言
南风lof2 小时前
源码赏析:Java线程池中的那些细节
java·源码阅读
pengyu2 小时前
【Java设计原则与模式之系统化精讲:零】 | 编程世界的道与术(理论篇)
java·后端·设计模式
程序员岳焱2 小时前
16.Java Annotation注解:元数据与代码增强
java·后端·编程语言
保持学习ing2 小时前
黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+LinkedList)
java·笔记·算法·面试