精华内容
下载资源
问答
  • 小球碰撞

    2019-09-27 02:14:05
    采用java awt以及swing写的小球碰撞 线程是一个非常重要的知识块!!! //球类 public class Ball { //1.属性:所有球的共同的字段 int x; int y; int d;//球的半径 int speed;//速度 int dir; ...

    采用java awt以及swing写的小球碰撞

    线程是一个非常重要的知识块!!!

    //球类
    public class Ball {
        
        //1.属性:所有球的共同的字段
        int x;
        int y;
        int d;//球的半径
        int speed;//速度
        int dir; //方向
        Color c;//颜色
        
        //定义四个方向
        public static final int LEFT_UP = 1;//左上
        public static final int LEFT_DOWN = 2;//左下
        public static final int RIGHT_UP = 3;//右上
        public static final int RIDHT_DOWN = 4;//右下
        
        //构造器 随机构造
        public Ball() {
            
             x = (int) (Math.random()*800);
             
             y = (int)(Math.random()*600);
             
             d = (int)(Math.random()*50) + 50;
             
             c = new Color(
                     (int)(Math.random()*256),
                     (int)(Math.random()*256),
                     (int)(Math.random()*256));
             
            dir = (int)(Math.random()*4) + 1;
            
            speed = (int)(Math.random()*5) + 5;
            
            
        }
        
        //行为:
        //
        /*  fillOval方法:
                使用当前颜色填充外接指定矩形框的椭圆。
            参数:
            x - 要填充椭圆的左上角的 x 坐标。
            y - 要填充椭圆的左上角的 y 坐标。
            width - 要填充椭圆的宽度。
            height - 要填充椭圆的高度。 
         */
        public void draw(Graphics g) {
            g.setColor(c);//设置颜色
            g.fillOval(x, y, d, d);
        }
        
        //根据方向更改坐标
        //碰撞检测
        public void change() {
            switch(dir) {
            
            case RIGHT_UP://向右上方向移动
                x += speed;//以speed的速度移动
                y -= speed;
                if(y < 0) {
                    dir = RIDHT_DOWN;
                }
                if(x > 800-d) {
                    dir = LEFT_UP;
                }
                break;
            case RIDHT_DOWN://向右下方向移动
                x += speed;
                y += speed;
                if(x > 800-d) {
                    //dir = RIDHT_DOWN;
                    dir = LEFT_DOWN;
                }
                if(y > 600-d) {
                    dir = RIGHT_UP;
                }
                break;
            case LEFT_UP://向左上方向移动
                x -= speed;
                y -= speed;
                if(x < 0) {
                    dir = RIGHT_UP;
                }
                if(y < 0) {
                    dir = LEFT_DOWN;
                }
                break;
            case LEFT_DOWN://向左下方向移动
                x -= speed;
                y += speed;
                if(x < 0) {//当碰到左边界,让小球方向改为右下
                    dir = RIDHT_DOWN;
                }
                if(y > 600-d) {//当碰到下边界,让小球方向改为左上
                    dir = LEFT_UP;
                }
                
                break;
            default:
                System.out.println("error");
                System.exit(0);
            }
        }
    }
    //窗体
    public
    class BallFrame extends JFrame{ //构造器 public BallFrame() { //创建窗体 最底层 // JFrame frame = new JFrame("窗体"); //让BallFrame继承JFrame 则直接用this调用 //设置窗体的位置和大小 // frame.setBounds(500,200,800,600);//x y 宽 高 this.setBounds(500,200,800,600); //容器类 //JPanel panel = new JPanel(); BallPanel panel = new BallPanel(); //设置背景颜色 panel.setBackground(Color.black); //将容器添加到窗体上 容器在窗体上层 // frame.add(panel); this.add(panel); panel.move();//球体移动方法 //设置窗体显示 // frame.setVisible(true); this.setVisible(true); //设置窗体关闭 // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new BallFrame(); } }
    /*
     * 1 创建数组,存放多个球
     * 2 在构造方法中,对数组进行初始化
     * 3 在paint方法中,用for循环遍历每个球
     * 4 在move中 通过遍历到的球 
     * 
     */
    //自定义容器类
    public class BallPanel extends JPanel{
        
        //创建一个球的对象
        Ball b1 = new Ball();
        
        Ball[] balls = new Ball[20];
        
        //构造
        public BallPanel() {
            for(int i = 0 ; i < balls.length ; i++) {
                balls[i] = new Ball();
            }
        }
        //重写父类绘图方法
        //Graphics 画笔类
        public void paint(Graphics g) {
            super.paint(g);
            
            b1.draw(g);
            
            for(int i = 0 ; i < balls.length ; i++) {
                balls[i].draw(g);
            }
            
        }
        
        //move方法
        public void move() {
            
            //开辟新的线程
            new Thread() {
                public void run() {
                    while(true) {
                        b1.change();
                        
                        for(int i = 0 ; i < balls.length ; i++) {
                            balls[i].change();
                        }
                        //重构
                        repaint();
                        try {
                            Thread.sleep(50);
                        }catch(Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
            
        }
    }

     

    转载于:https://www.cnblogs.com/jiang0123/p/11285986.html

    展开全文
  • C++小球碰撞C++ 小球碰撞

    热门讨论 2010-06-30 18:31:44
    C++ 小球碰撞 C++ 小球碰撞 C++ 小球碰撞
  • 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 ...
  • flash 小球碰撞

    2011-11-07 21:14:31
    小球碰撞
  • canvas小球碰撞.html

    2019-06-17 12:02:09
    canvas小球碰撞 类似屏保小球
  • 小球碰撞叠加html5

    2019-09-09 00:01:53
    小球碰撞叠加html5
  • 主要为大家详细介绍了javascript canvas检测小球碰撞,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 原生js小球碰撞动画代码
  • 小球碰撞检测Demo

    热门讨论 2013-07-18 11:04:09
    小球碰撞检测Demo
  • HTML5小球碰撞叠加是一款HTML5小游戏,利用了2D特效引擎插件box2d实现小球碰撞叠加。
  • 小球碰撞检测

    2012-12-31 14:51:38
    java小球碰撞检测,使用图形界面实现多个小球的碰撞效果!
  • 小球碰撞设计

    2012-10-24 19:48:07
    讲述了在java中小球碰撞过程的制作原理!!
  • HTML5小球碰撞叠加zip

    2019-07-03 13:29:13
    HTML5小球碰撞叠加是一款HTML5小游戏,利用了2D特效引擎插件box2d实现小球碰撞叠加。
  • Android 小球碰撞检测技术
  • 主要介绍了原生JS实现多个小球碰撞反弹效果,结合完整实例形式分析了javascript实现小球碰撞的相关数值计算、随机数生成、事件响应等操作技巧,需要的朋友可以参考下
  • Java实现小球碰撞检测

    2012-09-04 17:15:33
    Java 小球碰撞 碰撞检测 碰撞引擎,看了一些网上的例子,然后实现了一种小球碰撞的算法,是使用平面向量和冲量守恒完成的。
  • java小球碰撞边框反弹并且互相碰撞消失
  • VB小球碰撞程序

    2014-01-15 19:17:54
    VB小球碰撞程序,含有源程序代码,可以作为vb学习使用, 至qq2234960726邮箱:VB编程爱好。
  • 小球碰撞java版本

    2012-08-04 09:55:45
    采用多线程的方式模拟小球碰撞的图形化方式
  • VC++模拟小球碰撞

    2011-12-15 13:15:43
    利用VC++6.0 MFC 模拟小球碰撞过程,可设置两个小球的速度
  • 主要介绍了jQuery实现的分子运动小球碰撞效果,涉及jQuery基于定时函数操作页面元素动态变换的技巧,需要的朋友可以参考下
  • 小球碰撞屏保

    2019-12-04 23:03:18
    小球碰撞屏保 你好! 这是本人的第一篇文章,仅供参考。 一、首先建立一个ball的类 ball类的具体代码如下(初始化小球的属性以及书写与小球有关的方法): package ball; import java.awt.Color; import java.awt....

    小球碰撞屏保

    你好! 这是本人的第一篇文章,仅供参考。

    一、首先建立一个ball的类

    ball类的具体代码如下(初始化小球的属性以及书写与小球有关的方法):

    package ball;
    
    import java.awt.Color;
    import java.awt.Graphics;
    
    public class Ball {
    	int x,y,speed,d;//x为小球横坐标,与为小球纵坐标,speed为小球移动速度,d为直径
    	Color c;
    	int dir; //定义路径
    	public static final int LEFT_UP=1;
    	public static final int LEFT_DOWN=2;
    	public static final int RIGHT_UP=3;
    	public static final int RIGHT_DOWN=4;
    	
    	public Ball(){//构造方法,定义球的属性
    		dir=(int)(Math.random()*4)+1;
    		x=(int)(Math.random()*1920);//随机生成x坐标
    		y=(int)(Math.random()*1080);//随机生成y坐标
    		speed=(int)(Math.random()*10)+5;//给小球一个随机的速度
    		d=(int)(Math.random()*50)+10;//随机生成大小不一样的小球
    		c=new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));//生成的球颜色不一样
    	
    	}
    	
    	public void DrawBall(Graphics g){//画出小球
    		g.setColor(c);
    		g.fillOval(x, y, d, d);
    		
    	}
    	
    	
    	public void change(){
    		switch (dir) {
    		case LEFT_UP:
    		 x-=speed;
    		 y-=speed;
    		 if(y<0){//判断是否超出屏幕
    			 dir=LEFT_DOWN;
    		 }
    			 
    		if(x<0){
    			dir=RIGHT_UP;
    		}
    			
    			break;
    		case LEFT_DOWN:
    			x-=speed;
    			y+=speed;
    			if(y>1080){
    				dir=LEFT_UP;
    				
    			}
    			if(x<0){
    				dir=RIGHT_DOWN;
    			}
    			break;
    		case RIGHT_UP:
    			x+=speed;
    			y-=speed;
    			if(y<0){
    				dir=RIGHT_DOWN;
    				
    			}
    			if(x>1920){
    				dir=LEFT_UP;
    			}
    			break;
    
    		default:
    		case RIGHT_DOWN:
    			x+=speed;
    			y+=speed;
    			if(y>1080){
    				dir=RIGHT_UP;
    			}
    			if(x>1920){
    				dir=LEFT_DOWN;
    			}
    			break;
    		}
    	
    	}
    }
    
    

    二、建立BallFrame类

    BallFrame类的具体代码如下:

    package ball;
    
    import javax.swing.JFrame;
    
    import com.sun.awt.AWTUtilities;
    
    public class BallFrame {
    	
    	public static void main(String arg[])  {
    		JFrame j=new JFrame();
    		BallPanel b=new BallPanel();
    		j.add(b);
    		j.setSize(1920,1080);
    		j.setDefaultCloseOperation(3);
    		j.setUndecorated(true);//去边框
    		AWTUtilities.setWindowOpaque(j, false);//透明
    		j.setVisible(true);
    		b.move();
    		
    		
    		
    		
    	}
    
    }
    
    
    • 使用import com.sun.awt.AWTUtilities时,可能会出错。
    • 解决方法:在项目中Build Path ->Libraries中重新导入JRE。

    三.建立BallPanel类

    BallPanel类的具体代码如下:

    package ball;
    
    import java.awt.Graphics;
    
    import javax.swing.JPanel;
    
    public class BallPanel extends JPanel{
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	Ball[] ba=new Ball[100];//小球对象数组
    	
    	public BallPanel(){
    		for (int i = 0; i < ba.length; i++) {
    			ba[i]=new Ball();//创建小球
    		}
    	}
    	@Override
    	public void paint (Graphics g){//画出小球
    		super.paint(g);
    		setOpaque(false);
    		for (int i = 0; i < ba.length; i++) {
    			ba[i].DrawBall(g);
    		}
    		
    	}
    	public void move(){
    		new Thread(){//新建线程
    			public void run(){
    				while(true){
    					for (int i = 0; i < ba.length; i++) {
    						ba[i].change();
    					}
    					repaint();//重画
    					try{
    						Thread.sleep(30);
    					}catch(Exception e){
    						
    					}
    					
    				}
    			}
    		}.start();
    	}
    	
    	
    	
    
    }
    
    
    

    一个简单的程序便完成了。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,508
精华内容 2,203
关键字:

小球碰撞