如何运用java程序设计创建移动图形(碰撞检测)

    作者:课课家教育更新于: 2018-11-21 20:09:37

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

      如何运用java程序设计创建移动图形(碰撞检测)

      在上一节的教程中,如何运用java程序设计认识了运动的控制,那么现在我们在深入去制作,那么就是对于碰撞检测吧。

      在游戏中判断物体是否碰撞到其他物体,是一个非常重要的知识点,例如子弹碰到飞机,小球碰到墙壁,贪吃蛇碰到障碍物等。

      阅读课本碰撞检测部分,碰撞检测主要靠判断两个物体,是否有重叠部分来进行。

      下面我们用一个运动过程中,碰到墙壁会反弹的例子,来说明碰撞检测的方法。

      我们可以将上一节课的MyPanel改成下面的代码,可以实现小球碰到墙壁时反弹:

    import java.awt.*;

    import java.awt.image.*;

    import java.util.*;

    public class MyPanel extends Panel implements Runnable {

        private int x;

        private int y;

        private int dx,dy;

        private int diameter;

        private int width;

        private int height;

        private Image im;

        private Graphics dbg;

     

     

        public MyPanel() {

            x=50;

            y=50;

            dx=10;dy=10;

            diameter=50;

            width=300;

            height=200; 

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

     

        }

     

     

        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, height);

                if (im == null) {

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

                } else {

                    dbg = im.getGraphics();

                }

            }

            dbg.setColor(Color.WHITE);

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

            dbg.setColor(Color.blue);

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

        }

     

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

        x=x+dx;

        y=y+dy;

        if((x<0)||(x>width-diameter)){

        dx=-dx;

        }

        if((y<0)||(y>height-diameter)){

        dy=-dy;

        }  

        }

        

        public void run() {

         while(true){

            gameUpdate();

            gameRender();

            gamePaint();

            //以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快

            try {

                Thread.sleep(200);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间

            catch (InterruptedException e) {

                e.printStackTrace();}          

            }

       }

    }

      温馨提醒大家:注意,(最好分步骤实现,先实现水平方向方画出两条直线,让小球左右反弹,再实现画四条直线,斜向反弹)。

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

      最后给大家一个练习,让大家可以在原基础上进行游戏的修改,并且学会如何去运用与修改。

      练习5:能否在上题的基础加上一个红色小球,让一蓝一红两个小球在窗口中弹动,如果两个小球相互碰到,就反弹开.(自己先试一下,做不出再参考”两小球碰撞.doc”)

      小编结语:大家在学完了如何运用JAVA程序设计创建移动图形(碰撞检测),大家有什么感想呢?希望大家能够好好学习程序设计,这对于我们以后的生活是非常有用的。

课课家教育

未登录