Processing之旅-----【6课,ArrayList实验课】
上课,这节课我们继续对数据结构的深入学习,这一次我们实践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:}
:funk:貌似很高端 不错不错{:soso_e179:} 高端大气上档次,很不错的例子,值得我们去学习。。。。 看上去有点难度呢!好好学! 好东本西,就是有些不懂
页:
[1]