这几天刚刚学习了java线程,然后跟着书做了几个关于线程的练习,其中有一个练习题是小球动起来。这个相信很简单,只要运用线程就轻松能够实现。然后看到了它的一个课后思考题,怎样让小球做个抛物线运动,这点我调试了很久,上网也找了很多资料,但是没有那种适合我们小白的教程,于是我简单讲讲我的思路。我将从如何画一个小球开始到一步步实现小球进行抛物线运动。嘿嘿!!

一、任务分解

现在我们来做抛物线运动的小球,先不急写代码,先来想象一下做好的结果是什么样子的。我将这个任务分成三步,第一步,画一个小球;第二步,该怎样小球动起来;第三步,让小球做抛物线运动。

二、画一个小球

这个相对来说,这个任务相信你们对你们都不是难事。这里我就简单的提下。在这里我借助是java swing组件。首先我先附上代码。

1 packagestar;2

3 importjava.awt.Color;4 importjava.awt.Graphics;5

6 importjavax.swing.JFrame;7 importjavax.swing.JPanel;8

9 public classtest1 {10

11 /**

12 *@paramargs13 */

14 public static voidmain(String[] args) {15 //TODO Auto-generated method stub

16 JFrame w = new JFrame();//生成窗口容器对象

17 MyPanel3 pw = new MyPanel3();//创建扩展画布对象,这时画布已经有小球

18 w.add(pw);//把画布加到窗口容器上

19 w.setSize(400,500);//设置窗口大小

20 w.setVisible(true);//上面的窗口是在内存中,并未显示

21 }22

23 }24 class MyPanel3 extends JPanel{//通过继承画布类,扩展成自己想要的画布

25 int x=30;//定义小球初始横坐标

26 int y=30;//定义小球初始纵坐标

27 public void paint(Graphics g){//重写paint方法,这里的g相当于画笔角色

28

29 g.setColor(new Color(30,34,255));//设置画笔颜色

30

31 g.fillOval(x,y,20,20);//画直径为20的圆

32 }33 }

因为不能直接在窗口容器画画,所以只能寻找一个中介,那中介就是画布,先把你想画的东西画在画布上,然后把画布通过add方法添加到窗口容器上。然后java提供我们的画布是一张空的画布,在这里我通过继承画布类,重写paint方法,让画布上面有我想要东西。通过27行~32行代码,已经在画布画了一个小球。

三、让小球动起来

现在,小球已经有了,接下来让小球动起来,我们先让小球垂直下落.这能有人会说让小球动起来还不简单,利用循环不断让小球的纵坐标加一不就好了,就像这样,

public void paint(Graphics g){//重写paint方法,这里的g相当于画笔角色

g.setColor(new Color(30,34,255));//设置画笔颜色

while(true){if(y>400){//大于四百就停止运动

break;

}

g.fillOval(x,y,20,20);//画直径为20的圆

y++;

}

}

可是真的如我们想的那样吗?好了,我也不卖关子,他的真实运行结果是这样的

这结果其实也在意料之中,因为我们坐标是加了,但是以前画的没抹去呀!!聪明的你也应该想到了只要找到抹去以前画的,那小球不就动起来了。这里就运用线程的知识了,附上这里附上小球动起来的关键源码

1 class MyPanel2 extends JPanel implementsRunnable{//4 int x=30;5 int y=30;6 8 public voidpaint(Graphics g){9 super.paint(g);//抹去上次画的小球10 g.setColor(new Color(30,34,255));11

12 g.fillOval(x,y,20,20);13 }14 public voidrun(){//实现Runable接口里run方法,当线程启动的时候会自动调用run方法。15 while(true){16

19 y++;//坐标每100ms加一个坐标20 try{21 Thread.sleep(100);}//线程每次休息100ms22 catch(Exception e){};23 repaint();//再次调用paint方法24 }25 }

这里把第九行代码重点说下,如果删掉这句代码,最后结果就跟利用循环差不多,没有抹去以前画的。因为要使用线程,所以在主函数中创建线程对象,然后让他启动。

Thread t = new Thread(pw);

t.start();

四、让小球做抛物线运动

好了,步入最后的正题,让小球做抛物线运动。在这里正式开始之前,我们先想下高中物理学的自由落体运动,它是不是抛物线的一种形式,对的,自由落体水平方向是不是做匀速运动,竖直方向是不是做加速度为g的加速运动。大家有没有在这里受到启发。好了我也不卖关子。听我慢慢道来,在上面我们小球动起来的实质就是让小球在每个固定时间内就是每100ms时间,小球的纵坐标+1;而抛物线的水平方向是不是在每个固定的时间段里水平坐标加一个固定的值.例如,水平方向每100ms加1个像素。同理,来分析下竖直方向的情况。不知道大家还记不记得加速运动的一个规律:在初速度为零的加速运动中,相同时间段的位移之比为1:3:5:7.....;意思就是在第一个100ms时间内,增减1个像素,那么第二个100ms时间段内增加3个像素,第三100ms增加5像素.....;依次规律,在这里附上源码

1 class MyPanel2 extends JPanel implementsRunnable{2

3 int x=30;4 int y=30;5 int num=1;//记录y坐标每100ms增加的像素值

6 public voidpaint(Graphics g){7 super.paint(g);8 g.setColor(new Color(30,34,255));9

10 g.fillOval(x,y,20,20);11 }12 public voidrun(){13 while(true){14 x+=4;15 y+=num;16 num+=2;//每100ms他的增量加2

17

18 try{19 Thread.sleep(100);}20 catch(Exception e){};21 repaint();22 }23 }24 }

到这里算是大功告成了。

五、结束语

通过这个练习,让我清楚的认识到学编程不单单只是学编程,而是需要多方面知识的贯通,每个编程的人在编程的时候都有自己一套方法论,而这些方法论不是凭空产生的,而是通过大量知识的沉淀,然后产生质变。希望大家以后在编程道路上能够找到自己收获自己想要的东西。

原文:http://www.cnblogs.com/songadai/p/6906049.html

java模拟抛物线_小tips:用java模拟小球做抛物线运动相关推荐

  1. 用JAVA写一个画图小程序(JAVA 大作业)

    第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...

  2. java length()函数_小猿圈介绍java函数式编码结构及优势

    对于java大家都已经不陌生了吧,今天小猿圈Java讲师就分享一篇关于java函数式编码结构及优势的知识点,希望对于学习java的你有一定的帮助,想学习就需要积累. 探讨三种下一代JVM语言:Groo ...

  3. 判断三角形java代码_小猿圈Java循环嵌套语法的使用介绍

    Java是一直被程序员使用的程序之一,而且应用也是最广泛的一个,很多应用中都会用得到,小猿圈java讲师就为你介绍一下Java循环嵌套语法的使用介绍,希望对你有所帮助. 嵌套循环是指在一个循环语句的循 ...

  4. java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程

    原标题:小猿圈Java开发之从代码看spring mvc请求处理过程 Java作为编程界的常青树,有自己生存的独到之处,小猿圈java讲师今天就分享一个关于从代码看spring mvc请求处理过程,通 ...

  5. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  6. java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解

    小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...

  7. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  8. java while语句打印三角形_小猿圈Java循环嵌套语法的使用介绍

    Java是一直被程序员使用的程序之一,而且应用也是最广泛的一个,很多应用中都会用得到,小猿圈java讲师就为你介绍一下Java循环嵌套语法的使用介绍,希望对你有所帮助. 嵌套循环是指在一个循环语句的循 ...

  9. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

最新文章

  1. 因为修苹果电脑太贵,美国人自学当上百万粉博主,网友:坐标深圳,不存在这问题...
  2. 婚礼答谢宴ppt模板_女儿结婚请柬制作 女儿结婚宴会邀请函模板免费
  3. 用js实现导航栏shoufang效果_【读者投稿】用Github+docsify,我花了半天就搭好了个人博客...
  4. Spring中抛出异常时,既要要返回错误信息,还要做事务回滚
  5. 解决ng界面长表达式(ui-set)
  6. 10年老电脑如何提速_2020年10月和双十一轻薄本/轻薄型笔记本电脑如何挑选?内含轻薄本/轻薄型笔记本电脑推荐!...
  7. 你不知道的分布式锁+分布式事务面试题
  8. matlab指数分布拟合,如何使用matlab拟合指数分布函数?
  9. 工欲善其事必先利其器之学编程的电脑需要什么配置
  10. 解决html页面运行时出现乱码问题
  11. 2022年上半年系统集成项目管理工程师上午真题及答案解析
  12. 天池历届大赛答辩PPT及视频
  13. 均方值-数学期望-方差
  14. 【Opencv实战】刷爆朋友圈的特效“人物动漫化”是什么鬼?今天教你涨姿势—网友狂喜:我要学习,不许拦我
  15. 【hdu】6441 Find Integer - 费马大定理
  16. 89元尝鲜智能家居 天猫精灵方糖智联3件套简评
  17. GDT(全局描述表)
  18. 20210209PC版微信 网络不可用,请检查你的网络设置 的解决方法
  19. 【C Primer Plus第二章课后编程题】
  20. 1、债权融资 - 打造企业上市系列文章

热门文章

  1. Java 必会的工具库,让你的代码量减少90%
  2. 【SSH系列】---Hibernate的基本映射
  3. 哈佛国际评论学术写作挑战赛介绍
  4. RK3399 focaltech敦泰触摸屏移植调试
  5. 我对于外包开发的看法
  6. Android避免内存溢出(Out of Memory)方法总结
  7. Fatal error: require(): Failed opening required ‘/home/www/xx/public/../thinkphp/start.php
  8. 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)
  9. java组织机构代码验证规则
  10. echarts 数据区域缩放