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