美文网首页
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