第10课,制作单球动画;

1.视频链接:

bouncing ball

2.代码分析:

/*file name bouncingBallAnimation.java
 * to make an animation of ball bounce from the left corner to 
 * right corner
 * 
 */

import acm.graphics.GOval;
import acm.program.GraphicsProgram;

public class bouncingBall extends GraphicsProgram {

/**
     * 
     */
    private static final long serialVersionUID = 1L;

/**to define the diameter of ball equal to 30 */
private static final double Diam=30;

/**to define the gravity */
private static final double Gravity=3;

/** */

/** define the velocity on Y line reduce 0.1 when bounce back*/
private static final double Yvel_reduce=0.9;

/**to pause the animation 50 senconds*/
private static final int Delay=50;-----------------------暂停

/**define the start velocity on Y line equals to 0 
 * define the velocity on X line equals to 5 */
private static final double Xvel=5.0;
private static final double S_Yvel=0.0;----------------------常量
private double Yvel=0.0;-------------------实例变量

/**define the staring location of ball*/
private static final double S_X=Diam/2;
private static final double S_Y=100;

/**private Instance variable*/
private GOval ball;------------------------实例变量

public void run() {
        setup();
        while(ball.getX()<getWidth()) {------------------球的左上角X坐标 小于 窗口宽度时,球向右运动
            moveBall();----------------------在X方向的速度不变,在Y方向加速下落
            checkForCollision();--------------------撞击后,反向运动,Y方向的速度减少10%
            pause(Delay);
        }
    }
    
    private void setup() {----------------准备对象
    ball=new GOval(S_X, S_Y,Diam, Diam);------------弹球的初始坐标(15,100,30,30)
    ball.setFilled(true);
    add(ball);
    }
    
    private void moveBall() {--------------下落时的移动方式
        Yvel+=Gravity;--------------下落时,Y方向的速度+重力加速度
        ball.move(Xvel,Yvel);----------------弹球在X和Y方向以不同的速度运动
    }

private void checkForCollision() {
        if(ball.getY()>getHeight()-Diam) {-----------------球的左上角坐标Y的高度-球的直径后,超过窗口高度时,球反向弹起
            Yvel=-Yvel*Yvel_reduce;--------------球在Y方向做反向运动,速度受重力影响减少到原来的90%
            double diff=ball.getY()-(getHeight()-Diam);-----------假设球运动到窗口下方,投影的距离=反弹的距离?(速度不同,距离应该是不一样的????)
            ball.move(0, -2*diff);-----接上,如果球运动到了窗口下方投影的位置,此时应该往正上方移动2个double diff的距离
        }    
    }
}

java自学笔记(4)-Stanford CS106A 弹球动画 20.9.9相关推荐

  1. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  2. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  3. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

  4. JAVA自学笔记21

    JAVA自学笔记21 1.转换流 由于字节流操作中文不是非常方便,因此java提供了转换流 字符流=字节流+编码表 1)编码表 由字符及其对应的数值组成的一张表 图解: 2)String类的编码和解码 ...

  5. JAVA自学笔记08

    JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...

  6. JAVA自学笔记25

    JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...

  7. JAVA自学笔记23

    JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...

  8. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  9. 廖雪峰Java自学笔记------Java简洁

    廖雪峰Java自学笔记------Java简洁 这是专门针对小白的零基础Java教程. 为什么要学Java? 因为Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师,选择Ja ...

  10. Java自学笔记总结04

    Java自学笔记04 一.Lambda表达式 1.1 函数式编程思想概述 1.2 体验Lambda表达式 1.3 Lambda表达式的标准格式 1.4 Lambda表达式的使用 1.5 Lambda表 ...

最新文章

  1. uva 10759 Dice Throwing
  2. ruijie交换机lacp动态_Server2016和华为s5720交换机链路聚合增加带宽
  3. vue报错 TypeError: merge is not a function
  4. java 像素级碰撞检测,» 像素级碰撞检测类
  5. python点击网页按钮 没有id_button没有id,没有onclick事件。点击却有提交的功能,如何实现的?...
  6. Laravel的中间件
  7. mysql和php长度的漏洞_mysql和php字符长度判断
  8. php 获取小数精度,php小数精度问题
  9. 高等代数(邱维声):高等代数的研究对象
  10. 沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
  11. 模拟集成电路设计基础知识(一):MOS管结构及其I/V特性
  12. 创建oracle本地数据库步骤详解
  13. Fluent动网格知识汇总
  14. SpringCloud-创建服务消费者-Feign方式(附代码下载)
  15. java 字数_java 字数统计
  16. C/C++编程学习 - 第13周 ⑤ 财务管理
  17. 浅谈《网络数据安全标准体系建设指南》(征求意见稿)的意见(附全文)
  18. MSRA-TD5000数据集使用
  19. 精简Cocos2dx-python环境搭建工程创建过程
  20. php 微擎钻石投票二开,[模块插件]微擎钻石投票男神女神公众号投票系统完美运营版其他-(微信)小程序...

热门文章

  1. 解决You must configure either the server or JDBC driver (via the serverTimezone conf)
  2. 裁剪算法(计算机图形学)
  3. 如何定义智慧与关于生活的美好 - 与子同 Yue 001
  4. 算法注册机编写扫盲之续篇---第二课
  5. 毕业生怎样尽快把自己打造成国际专家级人物?
  6. .Net -- EF Core详解
  7. 华师大计算机学硕分数线,华东师范大学2021考研复试分数线已公布
  8. C# 身份证号码验证正则和验证函数
  9. 飞马间谍软件猖獗,苹果iOS系统被击穿
  10. Netty网络编程学习笔记(四)——进阶篇