Java小游戏制作总结

总结

一,首先分析

	分析对象,
	寻找属性,
	发现方法,
	难点分析, 
    记录难点 

Java游戏笔记一

二,插入图片
首先调用一个工具类

/**
 * 常用工具类
 */
public class CommonUtils {
    
    
        /**
         * 读取图片资源, 转变为Java对象 Image
         * @param imgPath  图片路径
         * @return Image对象
         */
        public static Image getImage(String imgPath) {
    
    
            ImageIcon imageIcon = new ImageIcon(imgPath);
            return imageIcon.getImage();
        }

}

然后创建对象和窗口类(继承Frame),在窗口类中输入打开窗口的方法窗口的私有属性 代码见笔记二
(背景由始至终只有一张)
背景图片的地址设置完成后要调用至静态块中,创建画笔类画出背景。
对象类也同样方法插入图片地址。

Java游戏笔记二

三,程序的关闭与人物的移动

回到窗口类中,运行发现无法关闭,所以我们需要添加一个监听器类,进行关闭监听(见笔记三)
监听器不光能关闭程序,人物的移动也需要键盘的监听触发事件来进行移动,使用 this.addKeyListener的方法进行触发判断。(见笔记三第2部分)
注意:移动是人物类移动,所以在人物类中这样添加

Java游戏笔记三

创建方法使用参数判断按键的方向
 public void okDirPressed(int keyCode)
 使用switch判断
 然后在测试类中获取
    //监听键盘事件
        this.addKeyListener(new KeyAdapter() {
    
    
            //当键盘按下的时候触发
            // Var 获取被按下的键的数值 如:a-67,B-68
            @Override
            public void keyPressed(KeyEvent e) {
    
    
                int keyCode = e.getKeyCode();
                buffoon.okDirPressed(keyCode);
                buffoon.move(buffoon.getDir());
            }

            //当键盘松开的时候触发
            @Override
            public void keyReleased(KeyEvent e) {
    
    
                int keyCode=e.getKeyCode();
                buffoon.OkDirReleased(keyCode);


            }
        });

并且在人物类中创建一个判断方向移动的方法,
将X,Y轴的数值进行变更移动。
在将4个方向属性设置为布尔类型去判断,当我去按下俩个按键后触发斜走。(见笔记四)

子弹的发射BUG修复以及优化

子弹是由人物类发射出的,所以设置一个发射的方法并且在触发方法中在写一个判断,使用按键发射子弹(见笔记四)

在子弹实现发射后发现如果人物的移动属性为STOP,那么子弹也会停止,所以要在人物类中在创建一个与方向同类型的变量toki,在判断方向中将方向的值赋予给这个变量,在传递给子弹有参方法中的方向变量,
这样子弹的方向变量只有上下左右,并且在人物中将toki赋予一个默认的方向属性,在初始状态中子弹就会由着此方向进行移动,并且解决了一旦方向为静止状态时子弹的滞留。

Java游戏笔记四

边界的设置

新建一个方法,判断X,Y的距离有没有超过当前的设置的宽高,如果超过了就将X,Y的值变成四边边距的值,使用IF判断(要注意每个判断都是IF,因为else if 只判断一次,并且注意自身人物图片的大小)。
(代码见笔记五)。

数据的优化

步骤至此已完成,但是发现代码有许多的耦合,这种时候可以进行优化,我们发现发现属性中各个类的属性相同,所以我们可以设置一个父类来替代,减少代码的冗余还能增加复用性。使用继承然后在构造方法中使用super关键字带入参数,
代码如下所示:

public Buffoon(int x,int y,GameClinet gameClinet){
    
    
        super(x,y,
                DataPropertiesUtils.BUFFOON_SIZE,
                DataPropertiesUtils.BUFFOON_SIZE,
                DataPropertiesUtils.BUFFOON_SPEED
                ,gameClinet
        );

Java笔记五

制作人 徐杨

思路可能有点偏差,大体应该不差

									时间:2020/11/17

猜你喜欢

转载自blog.csdn.net/MyonlyloveLAX/article/details/109739398