目前我正在使用JOGL进行球检测程序时,我被告知一旦它们彼此靠近就会使球消失。
//this is the method from the main class
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glColor3f(1.0f, 1.0f, 1.0f);
glut.glutWireCube(2.0f * limit);
for (int i = 0; i < ball.length; ++i)
{
ball[i].display(gl);
}
for (int i = 0; i < ball.length; ++i)
{
ball[i].moveRandomly();
}
//this is the method from the auxiliary class
for (int i = 0; i < ball.length; ++i)
{
for (int j = 0; j < ball.length; ++j)
{
if (ball[i].distanceFrom(ball[j]) <= 10)
{
}
}
}
}
void display(GL gl) {
gl.glLoadIdentity();
gl.glTranslatef(position[0], position[1], position[2]);
gl.glColor3fv(colour, 0);
glut.glutSolidSphere(radius, 10, 10);
//glut.glutSolidTeapot(radius);
}
我尝试这样做是无济于事的,球一下子消失了,我也尝试用相同的结果减小半径,在正确的方向上任何一点都会非常感激。
答案 0 :(得分:2)
他们全部消失的原因是每个球都与自己进行比较。
在if
语句之前的内部循环中添加它(这是一个快速修复):
if (i == j) continue;
答案 1 :(得分:0)
我现在有更多的问题而不是帮助。
首先,你有多少个球?
这条线困扰我:
if(ballGone == false)
{
glut.glutSolidSphere(radius, 10, 10);
}
如果ballGone为假,那么球不会显示,但这意味着只有一个球,所以当它设置为假时,不会显示球。
根据这里:http://www.cs.umd.edu/~meesh/kmconroy/JOGLTutorial/我的担忧应该是合理的:
显示非常相似 java.awt.Component.paint()就是这样的 每次画布需要时调用 重绘/重新绘制/重新显示
因此,您可能希望了解如何重绘并确保将绘制未设置为false的状态的每个对象。