我正在尝试创建一个可以在x,y和z坐标中移动的弹跳球。球最初在原点上方的y轴上开始几个单位。我已经设法弄清楚如何让我的球在y平面上上下跳动,但每当我尝试添加x和z轨迹时,我都会弄清楚我做错了什么。
double initialVelocity = userInputY;
double initVelX = userInputX;
double initVelZ = userInputZ;
double speed = 1/500.0;
double time = 0;
double x, y, z =0;
if (time == 0){
velocity+= initialVelocity;
}
time += speed
velocity = velocity - 9.8 * speed;
if (y+velocity < 0.1){ //collision detection against the floor
velocity *= -1;
}
if (z + initVelZ < 100){ //Collision detection for ceiling of 100 units
initVelZ *= -1;
}
if (x + initVelX < 50){ //Collision detection for if ball moves 50 units away from origin in x
initVelX *= -1;
}
else{
y += velocity;
x += initVelX;
z += initVelZ;
}
gl.gltranslated(x, y, z);
glu.gluSphere() //not really that important to specify
当我只使用我的y变量时,我的球有一个弹跳动画,但只能上下移动。
答案 0 :(得分:0)
z和x坐标的比较向后看:
if (z + initVelZ < 100){ //Collision detection for ceiling of 100 units
initVelZ *= -1;
}
if (x + initVelX < 50){ //Collision detection for if ball moves 50 units away from origin in x
initVelX *= -1;
}
每次发现新位置在范围内时,这会反转速度。但是当新职位最终在范围之外时,他们需要被颠倒。
另外,您可能需要测试每个坐标方向两端墙壁的碰撞情况,以便球体可以从所有6个墙壁上反弹。
例如对于z坐标,逻辑可能如下所示:
if (z + initVelZ < 0.0 || z + initVelZ > 100.0) {
initVelZ *= -1.0;
}
其他坐标也一样。