0

ゲームオブジェクトのコレクションを持つ OpenGL プロジェクトがあります。オブジェクトを反復処理して update メソッドを呼び出すゲーム ループであるスレッドがあります。さらに、OpenGL には、オブジェクトを反復処理してオブジェクトをレンダリングする drawFrame メソッドがあります。最後に、オブジェクトを反復処理し、onTouchEvent メソッドの各オブジェクト バージョンを呼び出す 3 番目のスレッドに onTouchEvent メソッドがあります。

つまり、オブジェクトの 1 つが画面のタッチに基づいて位置を移動すると、以前の位置にあるオブジェクトのゴースト イメージが表示されます。これは単純なちらつきですが、非常に煩わしく、非常に明白です。(onTouchEvent に基づいていない) 自由に移動する他のオブジェクトには、それ自体のゴースト イメージはありませんが、onTouchEvent メソッドが呼び出されたときに位置が変化するオブジェクトは、ゴースト イメージを作成します。

これを防ぐにはどうすればよいですか?両方のメソッドを「同期 (this)」でラップしましたが、まだ機能しません。

public void drawFrame(GL10 gl)
    {
        if(renderType == RenderType.r2D)
            prepare2DDrawing(gl);
        else if(renderType == RenderType.r3D)
            prepare3DDrawing(gl);

    synchronized(this)
    {
        camera.draw(gl);
        for(GameObject obj:objects)
        {
            gl.glPushMatrix();
            obj.draw(gl);
            gl.glPopMatrix();
        }   
    }
}

public void update(float time)
{
    cds.testCollisions(objects);
    synchronized(this)
    {
        camera.update(time);
        for(GameObject obj:objects)
        {
            obj.update(time);
        }
        motions.clear();
    }
}
public void onTouchEvent(MotionEvent e)
{
    if(touchable == Touchable.TOUCHABLE)
    {
        synchronized(this)
        {
            for(GameObject obj:objects)
            {
                obj.onTouchEvent(e);

            }
        }
    }
}
4

2 に答える 2