如何运用java程序设计创建移动图形

    作者:课课家教育更新于: 2018-11-21 20:08:34

    大神带你学编程,欢迎选课

      那么这一节我们就来学习一下,如何运用java程序设计创建移动图形,希望大家能够好好学习这个课程,并且能够在这个基础上进行修改代码。

      在上一节的教程中,我们学会了基本绘图方法,基本思路是先创建一个窗体框架(Frame),然后创建一个面版(Panel),在面版中画图,再将面版装入窗体中。上节我们画的是静态的图片,这一节我们主要练习移动图形。

      学习目标:1.学会游戏基本框架

      2.学会键盘控制代码

      一.物体的运动方式。

      我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。

      1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

    如何运用java程序设计创建移动图形_JAVA游戏设计_JAVA_游戏制作_课课家

    我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。    1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

    我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。    1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

      在pp类中代码如下:

    import java.awt.*;

    import java.awt.event.*;

     

    public class pp{

     

        public pp() {

            Frame app = new Frame("DrawBall2");

            //监视关闭窗体事件

            app.addWindowListener(new WindowAdapter() {

                public void windowClosing(WindowEvent e) {

    1. exit(0);

                }

            });

            app.setLocation(100, 100);

            MyPanel drawB = new MyPanel(); //实例化MyPanel对象

            app.add(drawB, BorderLayout.CENTER); //在窗体中间显示画版

          

            app.pack();//运行app中的pack方法,动态调整frame的大小,使frame中的组件都可见

            app.setVisible(true);

            drawB.gameStart (); //运行app中的gameStart方法

        }

     

        /**

         * @param args the command line arguments

         */

        public static void main(String[] args) {

            new pp();

        // TODO code application logic here

        }

    }

     

     新建一个类,类名为MyPanel, 代码为:

    import java.awt.*;

    import java.awt.image.*;

    import java.util.*;

     

    /**

     *

     * @author Administrator

     */

    public class MyPanel extends Panel implements Runnable {

        private int x; //这里定义变量

        private int y;

        private int diameter;

        private int width;

        private int heigth;

        private Image im;

        private Graphics dbg;

        private Thread gamethread;

        private static final int FPS=50;

        

        public MyPanel() {

            x=50;//下面给变量赋初值

            y=50;

            diameter=100;

            width=600; //窗口的宽度

            heigth=500;//窗口的高度

            setBackground(Color.pink);//设置画版背景色

            setPreferredSize(new Dimension(width, heigth));//设置组件的大小

     

        }

     

     

        public void gamePaint() { //前屏绘制

            Graphics g;

            try {

                g = this.getGraphics(); //获取当前屏幕的Graphics对象

                if (g != null && im != null) {

                    g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

                }

                g.dispose();//释放当前屏幕的Graphics对象

            } catch (Exception e) {

            }

        }

     

        public void gameRender() { //离屏绘制

            if (im == null) {

                im = createImage(width, heigth);

                if (im == null) {

    1. out.println("im is null");

                } else {

                    dbg = im.getGraphics();

                }

            }

            dbg.setColor(Color.pink);//这里要和背景色一致

            dbg.fillRect(0, 0, width, heigth);//用底色矩形填充画版,擦去图案

    //这里加上画游戏的初始图形

            dbg.setColor(Color.blue);

            dbg.fillOval(x, y, diameter, diameter); //画出椭圆

        }

     

    public void gameUpdate() { //更新游戏逻辑

    //这里加上重复的代码

        x++; //让小球向右跑

        }

     

        

        public void run() {

        long t1,t2,dt,sleepTime;  

            long period=1000/FPS;  //计算每一次循环需要的执行时间,单位毫秒

            t1=System.nanoTime();  //保存游戏循环执行前的系统时间,单位纳秒

            while(true){

            gameUpdate();

            gameRender();

            gamePaint();

            t2= System.nanoTime() ; //游戏循环执行后的系统时间,单位纳秒

            dt=(t2-t1)/1000000L;  //本次循环实际花费的时间,并转换为毫秒

            sleepTime = period - dt;//计算本次循环剩余的时间,单位毫秒

            if(sleepTime<=0)        //防止sleepTime值为负数

                sleepTime=2;

                try {     

    1. sleep(sleepTime); //让线程休眠,由sleepTime值决定

               } catch (InterruptedException ex) { }

                  t1 = System.nanoTime();  //重新获取当前系统时间

    1. out.println("sleepTime is:"+sleepTime);

            }

     

       }

        public void gameStart(){

            gamethread = new Thread(this);

            gamethread.start();

       }

    }

    对于上面的这两个代码只是一个框架,大家可以先运行一下,试一下游戏,然后再在这个基础上进行修改。

           小编结语:其实,对于这个代码来说是非常简单的,那么后续我会给大家在这个JAVA的游戏设计的基础上,添加一些有趣的代码,对游戏进行修改,例如说:在图面上,画上两个小球,一个红色小球,起始位置在(50,50),半径80,向右运动等等,感谢大家的支持。

课课家教育

未登录