光滑的地面物理

时间:2017-05-14 03:40:44

标签: java collision-detection physics

我一直在使用Processing库处理Java中的一些东西,主要是像球碰撞器这样的东西:

class Ball {

  PVector pos;
  PVector vel;
  PVector acc;

  int r;
  float mass=1.0;

  public Ball(PVector pos, PVector vel, int r) {
    this.pos = pos;
    this.vel = vel;
    this.acc = new PVector(0,0);
    this.r = r;
  }

  public void applyForce(PVector force) {
    this.acc.x = force.x/mass;
    this.acc.y = -force.y/mass;
  }

  public void onHit() {
  }

  public void update() {
    this.pos.x += this.vel.x;
    this.pos.y += this.vel.y;
    this.vel.x += this.acc.x;
    this.vel.y += this.acc.y;
    this.acc.x = 0;
    this.acc.y = 0;

    if(this.pos.x + .7*this.r > width || this.pos.x - .7*this.r < 0) {
      this.vel.x = - this.vel.x;
    }
    if(this.pos.y + .7*this.r > height || this.pos.y - .7*this.r < 0) {
      this.applyForce(new PVector(0,1.894));
    }

    if(abs(this.vel.y) < .79) {
      this.vel.y = 0;
    }
  }

  public void show() {
    fill(255);
    ellipse(this.pos.x,this.pos.y,this.r,this.r);
  }

}

Ball b;

void setup() {
  size(800,600);


  b = new Ball(new PVector(width/2,height/2), new PVector(3,1), 20);
}

void draw() {
  background(0);

  b.applyForce(new PVector(0,-1));
  b.update();
  b.show();
}

我的问题是碰撞。我尝试用真实物理模拟所有东西,所以我觉得碰撞在任何情况下都应该是相同的(球与球,球在地上,球在墙上等)。但是我已经一遍又一遍地试图实现命中框,甚至只是如上所述的条件冲突,但我不能让一切正常工作。有没有一种简单的方法可以做这样的事情,还是更有条件的,通常是个案?如果是后者,我在哪里可以找到一个简单的地面对象交互(或喜欢)的例子?

0 个答案:

没有答案