美文网首页
Java学习——day 08

Java学习——day 08

作者: 振礼硕晨 | 来源:发表于2018-12-26 10:09 被阅读0次

    今天学习的主要内容是制作一款简单的游戏,复习并运用之前学习的面向对象的知识。所以今天的笔记将围绕着游戏制作的过程来进行。

    主要内容

    • 绘出游戏窗口
    • 在窗口中画东西
    • 图片的加载与绘画
    • 简易动画的制作

    笔记详情

    1. 绘出游戏窗口

    Java中绘画窗口需要定义 Frame 类的子类,然后在子类中进行绘窗口,可以设置窗口的大小、位置、是否可见、窗口大小是否能更改等。具体实例如下:

    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class MyFrame extends Frame {
    
        public void launchFrame() {
            setSize(500, 500);      // 窗口的宽度和导读
            setLocation(100, 100);      // 窗口的位置
            setVisible(true);   // 窗口是否可见
            this.setResizable(false);       // 窗口大小不能更改
    
            // 窗口是否能点击关闭
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    
        public static void main(String[] args) {
            MyFrame gf = new MyFrame();
            gf.launchFrame();
        }
    }
    

    2. 在窗口中画东西

    我们将窗口绘出来之后,就可以在窗口中画出我们需要的东西,比如:直线、形状、图片等。我们需要重写一个 paint() 方法,在这个方法中,我们可以传入画笔对象,然后通过使用画笔进行绘画。下面给出实例:

    package fengzhen;
    
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class MyFrame extends Frame {
    
        /********************重写方法,进行绘画********************/
        @Override
        public void paint(Graphics g) {
            g.setColor(Color.blue);     // 设置画笔颜色
            g.drawLine(100, 100, 200, 200);     // 画出直线
            g.drawOval(100, 100, 200, 300);    // 画出椭圆
            g.drawRect(100, 100, 200, 300);    // 画出矩形
            g.fillOval(200, 200, 200, 300);    // 画出填充矩形
            g.fillRect(0, 0, 100, 100);    // 画出填充矩形
    
            // 画出文字
            Font f = new Font("微软雅黑", Font.BOLD, 50);   // 设置字体样式
            g.setFont(f);       // 应用字体样式
            g.drawString("字体内容", 200, 200);
        }
    
        /********************重写方法,进行绘画********************/
    
    
        public void launchFrame() {
            setSize(500, 500);      // 窗口的宽度和导读
            setLocation(100, 100);      // 窗口的位置
            setVisible(true);   // 窗口是否可见
            this.setResizable(false);       // 窗口大小不能更改
    
            // 窗口是否能点击关闭
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    
        public static void main(String[] args) {
            MyFrame gf = new MyFrame();
            gf.launchFrame();
        }
    }
    

    3. 图片的加载与绘画

    如果我们要在窗口中画出图片,我们首先应该从本地加载图片,然后再进行绘画。这个图片加载的方法还是很常用的,我们可以将它封装成一个工具方法,放在 myUtil 类中,实例如下:

    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.net.URL;
    
    import javax.imageio.ImageIO;
    
    public class myUtil{
    
        private myUtil() {
        }
    
        public static Image getImage(String path) {
            URL u = myUtil.class.getClassLoader().getResource(path);
            System.out.print(u);
            BufferedImage image = null;
            try {
                image = ImageIO.read(u);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return image;
        }
    }
    

    这样我们就可以先加载图片,然后进行绘出图片,实例如下:

        @Override
        public void paint(Graphics g) {
            g.setColor(Color.blue);     // 设置画笔颜色
            g.drawLine(100, 100, 200, 200);     // 画出直线
            g.drawOval(100, 100, 200, 300);    // 画出椭圆
            g.drawRect(100, 100, 200, 300);    // 画出矩形
            g.fillOval(200, 200, 200, 300);    // 画出填充矩形
            g.fillRect(0, 0, 100, 100);    // 画出填充矩形
    
            // 画出文字
            Font f = new Font("微软雅黑", Font.BOLD, 50);   // 设置字体样式
            g.setFont(f);       // 应用字体样式
            g.drawString("字体内容", 200, 200);
    
            // 加载并绘出图片
            Image img = MyUtil.getImage("images/bg.png");
            g.drawImage(img, 200, 200, 100, 100, null);
        }
    

    4. 简易动画的制作

    在制作动画的时候,我们需要更改图片的位置,大小即可。但是在制作的时候,我们要是计算机不断地进行重绘我们的图片和其他的形状。我们可以定义一个内部类,通过这个内部类实例化出来的对象,来不断的进行重绘,实例如下:

    /**
     * 定义一个重画窗口的线程类,是一个上面定义的Frame类的内部类
     */
    class PaintThread extends Thread {
        @Override
        public void run() {
            while (true) {
                repaint();
                try {
                    Thread.sleep(40);   // 每隔40毫秒进行重绘
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    定义好之后,我们就可以在Frame类中的launchFrame方法中,通过内部类实例化出来的对象,来进行不断的重绘,实例如下:

    public void launchFrame() {
        setSize(500, 500);
        setLocation(100, 100);
        setVisible(true);
    
        // 通过内部类实例化出来对象的start方法,来不断进行重绘,start方法会调用内部类中重写的run方法
        new PaintThread().start();
    
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    

    相关文章

      网友评论

          本文标题:Java学习——day 08

          本文链接:https://www.haomeiwen.com/subject/zrwpkqtx.html