0

現在、ボール検出プログラムに 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);
}

私はボールが一度に消えるのを無駄にしようとしましたが、同じ結果で半径を小さくしようとしました.正しい方向のどんな種類の点でも大歓迎です.

4

2 に答える 2

2

それらがすべて消えている理由は、各ボールがそれ自体と比較されているためです.

ifこれをステートメントの前の内側のループに追加します(これは簡単な修正です)。

if (i == j) continue;
于 2009-10-30T17:00:54.997 に答える
0

現時点では、ヘルプよりも多くの質問があります。

まず、ボールは何個ありますか?

この行は私を悩ませます:

if(ballGone == false)
{
    glut.glutSolidSphere(radius, 10, 10);
}

ballGone が false の場合、ボールは表示されませんが、これはボールが 1 つしかないことを意味するため、false に設定するとボールは表示されません。

ここによると: http://www.cs.umd.edu/~meesh/kmconroy/JOGLTutorial/私の懸念は正当化されるべきです:

表示は、キャンバスを再描画/再描画/再表示する必要があるたびに呼び出されるという点で、java.awt.Component.paint() と非常によく似ています。

そのため、どのように再描画するかを調べて、状態が false に設定されていない各オブジェクトが描画されることを確認したい場合があります。

于 2009-10-30T16:49:50.463 に答える