java实现小球碰撞反弹

首先我们要在一个窗口里面显示这个功能,因此引入JFrame类然后创建一个窗口代码如下:
JFrame win=new JFrame();//新建窗口
win.setLocation(250,100);//设置窗口位置
win.setSize(800,600);//设置窗口大小
win.show();//显示窗口
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭退出
显示如下:

要实现这个功能做基础的就是要有一个小球,就像人吃饭这句话,少了人这个主角,说什么都是白说。世间所有事物都是对象,具有属性和操作,没有对象就没有一切。就下来我们就来生成一个小球,这里用到Panel类,创建一个MyPanel类继承于Panel类然后创建一个画画方法。代码如下:
class MyPanel extends Panel{
public void paint(Graphics g) {
g.setColor(Color.yellow);
g.fillOval(100, 40, 80, 80);
}
}
创建一个对象my,添加进win窗口里。代码如下:
MyPanel my=new MyPanel();
win.add(my);
效果如下:

 接下来就是让这个小球动起来,我们让这个小球向右移动,我们用线程和异常来实现。代码如下:

1.Thread t=new Thread(my);//新建线程
t.start();//开始线程

2.implements Runnable

3.public void run() {//运行方法
while(true){
repaint();//重新画圆
try {
Thread.sleep(10);十毫秒运行一次
}
catch(Exception e) {

        }
    }
}  

4.g.fillOval(x++, 40, 80, 80);//修改每次的横坐标
效果

一步一步来,接下来我们要实现的目标就是让小球碰到边界可以反向走s。
核心代码:
[java] view plain copy
int fly=1;
[java] view plain copy
if (fly==1) {
x++;
}
if(fly ==2) {
x--;
}
if(x>720) {
fly=2;
y=y+70;
}
if(x<0) {
fly=1;
y=y+70;
}
效果

好装备的差不多了,下面就开始实现完整功能了。
效果如下:

完整代码:
[java] view plain copy
package Ball;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;

import javax.swing.JFrame;

public class Ball {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame win=new JFrame();//新建窗口
    win.setLocation(250,100);//设置窗口位置
    win.setSize(800,600);//设置窗口大小
    win.show();//显示窗口
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭退出
    MyPanel my=new MyPanel();
    win.add(my);
    Thread t=new Thread(my);
    t.start();
}  

}

class MyPanel extends Panel implements Runnable{
int x=0,y=0;
int flyx=1,flyy=1;
public void paint(Graphics g) {
g.setColor(Color.yellow);
g.fillOval(x, y, 70, 70);
// System.out.println("23");
if (flyx==1) {
x++;
}
if(flyx ==2) {
x--;
}
if(flyy==1) {
y++;
}
if(flyy==2) {
y--;
}
if(x>730) {
flyx=2;
}
if(x<0) {
flyx=1;
}
if(y<0) {
flyy=1;
}
if(y>530) {
flyy=2;
}
}
public void run() {
while(true){
repaint();
try {

            Thread.sleep(10);
        }
        catch(Exception e) {  

        }
    }
}  

}

第一次写博客,写的不够详细,或者有错的地方欢迎大家的添加和指正,大家一起交流,我是个初学者,希望不要介意。

原文地址:http://blog.51cto.com/10972685/2066435

时间: 2024-10-08 17:21:10

java实现小球碰撞反弹的相关文章

(NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再来看一下小球与反弹棒碰撞发生的那点事 ;) 小球与反弹棒开始碰撞 同样我们在碰撞中也要调整小球的力矩,所以也要分开处理,首先是碰撞开始时的处理: -(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair ball:(CCNode *)

CSS3之碰撞反弹动画无限运动

示例代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>CSS3 碰撞反弹动画无限运动</title> 6 <style type="text/css"> 7 .container { 8 width: 600px; 9 height: 400p

小球碰撞

采用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;//左下 publi

小球碰撞墙壁----干掉误差

之前一直在沿用之前听课学来的"千篇一律"的小球碰撞墙壁或者地板的计算方法. 忽然发现,小球碰撞的时候,其实小球有一部分是进入了墙的里面,在小球速度并不快的情况下,或许不明显,但是当小球速度变的更快,小球半径也更大的时候,就没法看了 效果如下 代码如下(所有代码都只在chrome或者safari下能用,因为requestAnimationFrame方法我并没有写兼容): <!doctype html> <html> <head> <meta ch

HTML5 Canvas彩色小球碰撞运动特效

脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ 效果图如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5 Canvas彩色小球碰撞运动特效

原生js实现一个DIV的碰撞反弹运动

 原生js实现一个DIV的碰撞反弹运动: 关键在于DIV的边界检测,进而改变运动方向,即可实现碰撞反弹效果. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{margin:0;} div{height:100px;width:100px;back

Canvas+Js制作动量守恒的小球碰撞

目的:通过js实现小球碰撞并实现动量守恒 canvas我们就不多说了,有用着呢. 我们可以通过canvas画2D图形(圆.方块.三角形等等)3D图形(球体.正方体等待). 当然这只是基础的皮毛而已,canvas的强大之处在于可以做游戏,导入模型,粒子效果,实现漫游又或者全景和VR. 这里我们介绍纯js写的2D小球碰撞.(主要是博主的Three.js不咋地) 好吧,老规矩,先上图! 额...很尴尬的是博主的截图功底不咋地,没有截下碰撞的瞬间. 话不多说,开始教程. 首先我们需要创建画布给它一个id

小tips:用java模拟小球做抛物线运动

这几天刚刚学习了java线程,然后跟着书做了几个关于线程的练习,其中有一个练习题是小球动起来.这个相信很简单,只要运用线程就轻松能够实现.然后看到了它的一个课后思考题,怎样让小球做个抛物线运动,这点我调试了很久,上网也找了很多资料,但是没有那种适合我们小白的教程,于是我简单讲讲我的思路.我将从如何画一个小球开始到一步步实现小球进行抛物线运动.嘿嘿!! 一.任务分解 现在我们来做抛物线运动的小球,先不急写代码,先来想象一下做好的结果是什么样子的.我将这个任务分成三步,第一步,画一个小球:第二步,该

JAVA游戏简单碰撞原理

一.游戏效果图:玩家飞机与敌机碰撞 或子弹与敌机碰撞,产生爆炸效果,敌机与子弹在爆炸后消失. 二.实现原理:检测原理的两个对象是否碰撞,JAVA提供了Rectangle这个类,里面的intersects(Rectangle r)方法可以完成这种需求.目前的做法是,把屏幕内的子弹与飞机进行遍历,在遍历的过程用这个方法去检测是否有碰撞出现. 三.敌机与子弹碰撞代码: package com.jack; import java.awt.Graphics; import java.awt.Image;