【问题标题】:How can I handle different views in one game loop?如何在一个游戏循环中处理不同的视图?
【发布时间】:2015-03-31 00:03:41
【问题描述】:

我正在用 android 制作游戏,我有两个扩展 SurfaceView 的类(TitleView 和 GameView)。我也有一个 GameLoopThread,我在 TitleView 中初始化,它在这个视图中绘制我的所有位图,但它只在这个视图中有效。所以当我想改成GameView的时候,我怎么只在TitleView中初始化GameLoopThread而不是在GameView中,最后这个是黑屏,因为什么都没有画出来。

有人可以帮助我吗?

这是我的 GameLoopThread 类:

@SuppressLint("WrongCall")
public class GameLoopThread extends Thread {

    static final long FPS = 25;
    //private GameView view;
    private TitleView tview;
    private boolean running = false;

    public GameLoopThread(TitleView titleView) {
        this.tview = titleView;
    }

    public void setRunning(Boolean run) {
        running = run;
    }

    @Override
    public void run() {
        long ticksPS = 1000 / FPS;
        long startTime;
        long sleepTime;
        while (running) {
            Canvas c = null;
            startTime = System.currentTimeMillis();
            try {
                c = tview.getHolder().lockCanvas();
                synchronized (tview.getHolder()) {
                    tview.onDraw(c);
                }
            } finally {
                if (c != null) {
                    tview.getHolder().unlockCanvasAndPost(c);
                }
            }
            sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
            try {
                if (sleepTime > 0) {
                    sleep(sleepTime);
                } else {
                    sleep(25);
                }
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }

}

【问题讨论】:

    标签: android multithreading android-activity view surfaceview


    【解决方案1】:

    @Sergio,我有一个应用程序正在做类似的事情,视频视图然后是图片视图,但我每个都在不同的活动类中,主要活动是视频视图,然后当视频完成时,它会启动图片活动。如果这是你想要做的,

    通过调用 sartActivity 启动标题视图,

    私有静态最终 int TITILE_ACTIVITY_REQUEST_CODE = 1;

        Intent titleIntent = new Intent(GameViewActivity.this, TitleViewActivity.class);
        startActivityForResult(imageIntent, TITLE_ACTIVITY_REQUEST_CODE);
    

    完成标题活动后,从您的磁贴活动中调用以下命令,这应该会终止您的标题活动并重新启动您的游戏视图,

              setResult(Activity.RESULT_OK, intent);
              finish();
    

    在您的游戏活动视图中使用此方法接收标题视图完成的通知,

     @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) 
      {
        if (requestCode == TITLE_ACTIVITY_REQUEST_CODE) //* notification from titleview 
        {
          switch (resultCode) 
          {
              case Activity.RESULT_OK:
                  //* do something,
                  break;
    

    此代码非常适合我的应用程序,如果您有任何其他问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多