美文网首页
Box2D和Processing的结合(1)

Box2D和Processing的结合(1)

作者: 大龙10 | 来源:发表于2022-05-29 05:05 被阅读0次

书名:代码本色:用编程模拟自然系统
作者: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)运行结果

鼠标挪动,速写板下画出一连串方框对象。


相关文章

网友评论

      本文标题:Box2D和Processing的结合(1)

      本文链接:https://www.haomeiwen.com/subject/ogesprtx.html