|
上课,这节课我们继续对数据结构的深入学习,这一次我们实践ArrayList实例。 - /**
- * 对象链表
- * by Daniel Shiffman.
- *
- * 这个例子主要演示可如何使用ArraryList来存贮一个数量可变化的对象
- * ArrayList它可以添加也可以删除
- *
- *
- * 点击鼠标添加小球
- */
- ArrayList<Ball> balls;//定义了一个对象类型为《ball》的链表 对象 balls 【超级绕口】
- int ballWidth = 48;//定义了一个整形变量ballwidth 球宽
- void setup() {
- size(640, 360);// 设置了窗口大小
- noStroke();//图形都没有边框
- //创建一个空的链表
- balls = new ArrayList<Ball>();
-
- // 开始添加一个球进去
- balls.add(new Ball(width/2, 0, ballWidth));
- }
- void draw() {
- background(255);
- // 对于一个数组, 我们说balls.length是数组的长度(元素数), 对于一个ArrayList, 我们说balls.size()是链表的长度(元素数)
- // ArrayList的长度是动态的
- // 请注意,在ArrayList我们采用的是后序遍历。
- // 这是因为我们要从中删除元素
- for (int i = balls.size()-1; i >= 0; i--) {
- // 一个 ArrayList 并不知道我们存贮的是什么,所以我们要显示的声明,并接受其中的元素。
- Ball ball = balls.get(i);
- ball.move();
- ball.display();
- if (ball.finished()) {
- //remove()是删除元素的函数
- balls.remove(i);
- }
-
- }
-
- }
- void mousePressed() {
- // 添加一个新球
- balls.add(new Ball(mouseX, mouseY, ballWidth));
- }
- class Ball {//自定义类,球类
-
- float x;
- float y;
- float speed;
- float gravity;
- float w;
- float life = 255;
-
- Ball(float tempX, float tempY, float tempW) {//球类的构造函数
- x = tempX;
- y = tempY;
- w = tempW;
- speed = 0;
- gravity = 0.1;
- }
-
- void move() {//移动函数
- // 计算重力加速度
- speed = speed + gravity;
- // 计算新的位置
- y = y + speed;
- // 如果球的边界到达底部
- // 速度方向改变
- if (y > height) {
- // 反弹
- speed = speed * -0.8;
- y = height;
- }
- }
-
- boolean finished() {//球淡出函数
- // 球淡出
- life--;
- if (life < 0) {
- return true;
- } else {
- return false;
- }
- }
-
- void display() {//显示函数
- // Display the circle
- fill(0,life);
- //stroke(0,life);
- ellipse(x,y,w,w);
- }
- }
复制代码
那么,这节课就上到这里。下课。{:soso__13766225770624999893_3:}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|