2012.03.04 23:04 Android/OpenGL



쓰레드를 만들고 이미지를 움직여보겠습니다.

자바소스에서 GameThread.java를 만들겠습니다.

package pe.berabue.opengl;

import android.content.Context;

public class GameThread extends Thread {
		
	private boolean isRun;
	
	public GameThread(Context context) {
		isRun = true;
	}

	public synchronized void run() {
		while(isRun) {
			try	{
				MainActivity.mGLView.requestRender();
				Thread.sleep(10);
			}
			catch (InterruptedException e1)	{
				e1.printStackTrace();
			}
		}
	}
    }
}
딱 한 부분만 중요합니다.
MainActivity.mGLView.requestRender();
   requestRender()는 onDrawFrame()함수를 호출해줍니다. 쓰레드가 동작하는동안 지속적으로 onDrawFrame을 호출하겠지요.


MainActivity.java에서 쓰레드를 동작시키겠습니다.
package pe.berabue.opengl;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;

public class MainActivity extends Activity {
	
	public static GLSurfaceView mGLView;
	public static GameThread	mThread;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        mGLView = new GLView(getApplicationContext());
        mThread = new GameThread(getApplicationContext());
        
        setContentView(mGLView);
        
        mThread.start();
    }
    
    static {
    	System.loadLibrary("berabueLib");
    }
}
public static GLSurfaceView mGLView; 
 private -> public static으로 변경하였습니다. 쓰레드에서 mGLView 객체에 접근하기위해서. 

쓰레드 객체를 생성하고 쓰레드를 시작합니다~!


GLGameRenderer.c 에서 이전에 띄운 이미지를 움직여 보도록하겠습니다.
void updateGameLoop()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


	updatePanda();
	drawPanda();
}

void updatePanda()
{
	g_nY = ( g_nY < 0 ) ? 800 - g_nPandaHeight : g_nY-5;
}
updateGameLoop()안에 updatePanda()를 추가시키고 좌표가 변화되는 코드를 입력합니다.

빌드 후 실행을해보면~!
팬더가 지속적으로 올라가는 화면이 출력됩니다! 



posted by 베라뷰
TAG , ,
prev 1 2 3 4 5 6 7 ··· 12 next