书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录
5.7 Box2D和Processing的结合
1、Box2D和Processing
物体被创建好之后就扎根于Box2D的物理世界,Box2D知道它的位置,检查它是否发生碰撞,根据力的作用让它运动……你不需要动一根手指,Box2D就会替你完成所有事情!
但是,它无法显示这个物体。这也是一件好事,因为你可以尽情地发挥这方面的才能。在使用Box2D时,我们实际上是在说:“我想做这个虚拟世界的设计者,Box2D,我希望你帮我完成所有的物理计算。”
Box2D会将世界上的所有物体都存放在一个列表中,你可以调用World对象的getBodyList()函数访问这个列表。接下来,我想展示如何在程序中保存物体列表,你可能觉得这样做是多余的,并且会牺牲一定的性能,但它带来的便利性足以弥补这些代价。这样做使我们能够用原来的方法编写Processing程序,并能方便地跟踪并渲染物体。
2、一个简单的Box2D程序
1)Box类
- 我们在这里放置了盒子(Box)对象的实现,盒子对象是一个矩形物体。
Box.pde
class Box {
float x,y;
float w,h;
// Constructor
Box(float x_, float y_) {
x = x_;
y = y_;
w = 16;
h = 16;
}
// Drawing the box
void display() {
fill(127);
stroke(0);
strokeWeight(2);
rectMode(CENTER);
rect(x,y,w,h);
}
}
2)主程序
- 在主程序中,我们要实现这样的功能:在鼠标点击的位置创建一个盒子对象,将这个对象存放在ArrayList中。(这跟第4章粒子系统的示例程序非常相似。)
// A list for all of our rectangles
ArrayList<Box> boxes;
void setup() {
size(640,360);
// Create ArrayLists
boxes = new ArrayList<Box>();
}
void draw() {
background(255);
// When the mouse is clicked, add a new Box object
if (mousePressed) {
Box p = new Box(mouseX,mouseY);
boxes.add(p);
}
// Display all the boxes
for (Box b: boxes) {
b.display();
}
}
3)运行结果
鼠标挪动,速写板下画出一连串方框对象。