1

そのため、形状や画像をサーフェスビューに描画する方法を理解しようとしています。iv 複数のチュートリアルを使用しています。しかし、今は迷っています。ゲームループを持つスレッドがあり、私が理解していることから、このループですべての変数の更新が行われます

public void run() {
    Canvas c;
    while (running) {
         c = null;
         try {
             c = surfaceHolder.lockCanvas(null);
             synchronized (surfaceHolder) {
              //Insert methods to modify positions of items in onDraw()
             }
         } finally {
             if (c != null) {
                 surfaceHolder.unlockCanvasAndPost(c);
             }
         }
    }

}

onDraw(Canvas canvas) メソッドを持つ surfaceView があります。画面に楕円形を追加したいのですが、スレッドのwhileループからどのように行うのですか

私は現在、スレッドクラスにこれらの変数を持っています

private SurfaceHolder surfaceHolder;
private gameMain gamePanel; //my surfaceview class
private boolean running;

これを私のサーフェスビュークラスに含める必要がありますか?

setWillNotDraw(false);

私がそれを完全に間違っていると、人々はそれを指摘します。私はopenGLやライブラリを使いたくない

4

1 に答える 1

1

したがって、私がこの問題に与えた解決策は、次のように変更することです。

try {
    c = view.getHolder().lockCanvas();
    synchronized (view.getHolder()) {
        view.onDraw(c);
    }
    } finally {
        if (c != null) {
           view.getHolder().unlockCanvasAndPost(c);
        }
}

GameLoopThread クラスの run() メソッドで:

try {
    c = view.getHolder().lockCanvas();
    synchronized (view.getHolder()) {
        if(c != null)
            view.onDraw(c);
    }
    } finally {
        if (c != null) {
           view.getHolder().unlockCanvasAndPost(c);
        }
}

このアクティビティを終了して別のアクティビティを呼び出すために、うまく機能する GameOver というメソッドを追加しました。

private void GameOver() {
    gameLoopThread.setRunning(false);
    Context c = getContext();
    c.startActivity(intent); //intent must be declared
    ((Activity) Pruebas.this.getContext()).finish();
}

これが誰かに役立つことを願っています。

于 2013-08-24T07:33:34.017 に答える