2017-06-13 5 views
0

私はopenglを学ぼうとしていますが、情報を見つけるのが難しいためいくつか問題があります。画面上にフォームを作成することはできますが、画面を更新することはできません。多くのことを試しています。 ここで私はrunnableを使用しますが、何も動作しません。あなたの助けのための おかげで、ここではあなたが右、Androidのドキュメントからチュートリアルを使用しているようだsurfaceView私はOpenGLで画面をリフレッシュできません

public class MyGLSurfaceView extends GLSurfaceView implements Runnable{ 
int x1=1440,y1=2560,pub,i=1; 

private final MyGLRenderer mRenderer; 

public MyGLSurfaceView(Context context) { 
    super(context); 


    // Create an OpenGL ES 2.0 context. 
    setEGLContextClientVersion(2); 
    //fix for error No Config chosen, but I don't know what this does. 
    super.setEGLConfigChooser(8 , 8, 8, 8, 16, 0); 
    // Set the Renderer for drawing on the GLSurfaceView 
    mRenderer = new MyGLRenderer(); 
    setRenderer(mRenderer); 

    // Render the view only when there is a change in the drawing data 
    setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
} 

private final float TOUCH_SCALE_FACTOR = 180.0f/320; 
private float mPreviousX; 
private float mPreviousY; 
public void modif(){ 
    requestRender(); 
    try{Thread.sleep(20);} 
    catch(Exception e){}} 

@Override 
public boolean onTouchEvent(MotionEvent e) { 
    // MotionEvent reports input details from the touch screen 
    // and other input controls. In this case, you are only 
    // interested in events where the touch position changed. 

    float x = e.getX(); 
    float y = e.getY(); 

    switch (e.getAction()) { 

     case MotionEvent.ACTION_MOVE: 

      float dx = x - mPreviousX; 
      float dy = y - mPreviousY; 

      // reverse direction of rotation above the mid-line 
      if (y > getHeight()/2) { 
       dx = dx * -1 ; 
      } 

      // reverse direction of rotation to left of the mid-line 
      if (x < getWidth()/2) { 
       dy = dy * -1 ; 
      } 

      mRenderer.setAngle(
        mRenderer.getAngle() + 
          ((dx + dy) * TOUCH_SCALE_FACTOR)); // = 180.0f/320 
      requestRender(); 

     case MotionEvent.ACTION_DOWN: 
      modif(); 

    } 

    mPreviousX = x; 
    mPreviousY = y; 
    return true; 
} 

public void run(){ 
    while(true){ 
     modif(); 
    } 
} 

} 
+0

はあなたのビューの更新をい入れ? – Reaper

答えて

0

ための私のコードですか?図形を移動するために

https://developer.android.com/training/graphics/opengl/touch.html#angle

、あなたは画面をタッチしながら指を移動する必要があります。

あなたは他の何かを達成しようとしていますか?

+0

あなたは正しいですが、違いを見るためにMyGlRenderクラスのondrawframフォントで何かを持っていました。 if(i <-1.0f){i = 1.0f;} else {i- = 0.1f;} mSquare.draw(scratch、i、0.8f);私は四角形を変換することを許可しますが、フォームは進化しません。四角形は移動し、画面に触れると変形する –

+0

whileループの "modif"は呼び出されましたか? – Xys

+0

実行可能なGLSurfaceViewを使用するかどうかは不明です。実行可能なGLSurfaceViewでrun()をどこで呼び出すのか分かりませんが、メインスレッドではないと思います。 UIスレッドのしばらく(真)は良い考えではありません。 – Xys

0

私は再びtutoをreadedとき、私は解決策を見つける、私はあなたが/スワイプそれに触れるときに、ラインsetRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); I delete the line and now the cpde working.

関連する問題