Java 如何在run()方法内部传递GL10对象

Java 如何在run()方法内部传递GL10对象,java,android,opengl-es,Java,Android,Opengl Es,我相信我遇到的问题是,除非我在gameview.drawFrame()中使用GL10 gl,否则gameThread将无法工作。我已经尝试创建一个对象,但仍然不起作用。使用game.onResume更新游戏是否也是错误的? 我已经在Main.class中创建了一个gameThread实例,并对 public class GameThread extends Thread { Object gl; private static int MAX_FRAME_SKIPS; private stati

我相信我遇到的问题是,除非我在gameview.drawFrame()中使用GL10 gl,否则gameThread将无法工作。我已经尝试创建一个对象,但仍然不起作用。使用game.onResume更新游戏是否也是错误的? 我已经在Main.class中创建了一个gameThread实例,并对

public class GameThread extends Thread {
Object  gl;
private static int MAX_FRAME_SKIPS;
private static int FRAME_PERIOD;
private OpenGLActivity game;
private MyGLRenderer gameView;
private boolean gameRunning = true;
private boolean running = false;
Handler handler = new Handler();

public GameThread( int maxFPS, int maxFrameSkips) {
    game = new OpenGLActivity();
    gameView = new MyGLRenderer();
    MAX_FRAME_SKIPS = maxFrameSkips;
    FRAME_PERIOD = 1000 / maxFPS;
    gl = new Object();
}

@Override
public void run() {
    long beginTime;
    long timeDiff;
    int sleepTime;
    int framesSkipped;
    beginTime = System.currentTimeMillis();
    framesSkipped = 0;
    this.gameRunning = this.game.isRunning();
    this.game.onResume(); // Update game
    this.gameView.onDrawFrame((GL10) gl);    // Render the game
    timeDiff = System.currentTimeMillis() - beginTime;  // Calculate cycle length
    sleepTime = (int) (FRAME_PERIOD - timeDiff);         // Calculate time available to sleep

    // Checks if got time to sleep, either sleeps thread or catches up
    if (sleepTime > 0) {
        if (this.gameRunning && running) {
            handler.postDelayed(this, sleepTime);
        }
        while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
            this.game.onResume();                         // Update without rendering
            sleepTime += FRAME_PERIOD;                  // Add frame period to check if in next frame
            framesSkipped++;
            if (this.gameRunning && running) {
                this.run();                             // No time to wait! RUN! CATCH UP!
            }
        }
    }
}

public void setRunning(boolean running) {
    this.running = running;
}

您没有
GL10
对象这一事实只是这里的一个症状。事实上,我认为这在安卓系统上从未使用过。它是
javax.microedition.khronos.opengles
包的一部分,我认为它是某种标准的Java OpenGL ES接口。我不确定它是否有用,但我肯定从未见过有人使用过它

Android中通常使用的OpenGL接口位于
Android.OpenGL
包中,名为、

在这些类上,所有方法都是静态的。因此,您永远不需要真正的对象实例来进行OpenGL调用

但是,这是您的实际问题:要进行OpenGL调用,您需要创建一个OpenGL上下文,并将其设置为当前。您还需要一个渲染曲面。这方面有两个主要选项:

  • 使用接口(或者如果您需要支持低于17的API级别)是一种(中等)困难的方法
  • 您可以选择更方便、更广泛使用的路线,并使用一个为您创建上下文和渲染曲面的
我建议您从Android文档中的官方教程开始。一旦您完成以下步骤,以上所有内容将变得更加清晰:


您还应该知道OpenGLES1.x大部分被认为是过时的。ES 2.0及更高版本的应用越来越广泛。

我想添加您的另一个答案的链接,这将极大地解释如何使用
EGL14
界面。
public class Main extends Activity{

    GameThread gt = new GameThread(48, 100);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
    }

    public void PlayGame(View v) {
        Intent intent = new Intent(Main.this, OpenGLActivity.class);
        startActivity(intent);
        gt.setRunning(true);
    }