これは私がしばらく抱えていた問題であり、ここの誰かがそれに光を当てることができることを願っています.
レンダラーが次のように設定されている GLSurfaceView をロードする Android ゲームがあります。
public class GameRenderer implements GLSurfaceView.Renderer
{
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
BaseLib.init(); // Initializes the native code
}
public void onSurfaceChanged(GL10 gl, int width, int height)
{}
public void onDrawFrame(GL10 gl)
{
BaseLib.render(); // Call to native method to render/update the current frame
}
}
ビューは次のようになります。
public class GameView extends GLSurfaceView implements SurfaceHolder.Callback
{
private GameRenderer _renderer;
private GameListener _listener;
public GameView(Context context)
{
super(context);
this._renderer = new GameRenderer();
setRenderer(this._renderer);
this._listener = new GameListener();
BaseLib.setListener(this._listener);
}
public boolean onTouchEvent(final MotionEvent event)
{
int action = -1;
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN: action = 0; break;
case MotionEvent.ACTION_UP: action = 1; break;
case MotionEvent.ACTION_MOVE: action = 2; break;
}
if(action >= 0)
BaseLib.touch(action, event.getX(), event.getY());
return true;
}
}
touch
ネイティブ コードをトレースしてきましたが、イベント の途中で別のrender()
呼び出しが行われているように見える問題に気付きました。タッチ イベントが完了していないため、まだ読み込みが完了していないオブジェクトをレンダリングしようとするため、エラーが発生します。
これはネイティブ コード自体に問題がある可能性がありますが、これまでのところ問題を見つけることができなかったので、Java コードが呼び出しを中断し、完了する前にtouch
別のコードを呼び出している可能性があるかどうかを尋ねたかったのです。onDrawFrame()