首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android开发:游戏后台循环

Android开发:游戏后台循环
EN

Stack Overflow用户
提问于 2011-09-25 19:34:57
回答 2查看 922关注 0票数 1

我正在开发一个使用Canvas/Surfaceview的2d游戏,线程有问题。因此,我想要在后台完成一些事情,例如:每一秒SpawnEnemy()或滴答秒或攻击。

我尝试了Thread.wait,但那只会造成痛苦,并使我的游戏成为2fps。

这是我的gameLoop:

代码语言:javascript
复制
import android.graphics.Canvas;

public class GameLoopThread extends Thread {
       static final long FPS = 20;
       private GameView view;
       private boolean running = false;

       public GameLoopThread(GameView view) {
             this.view = view;
       }

       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 = view.getHolder().lockCanvas();
                           synchronized (view.getHolder()) {
                                  view.onDraw(c);
                           }
                    } finally {
                           if (c != null) {
                                  view.getHolder().unlockCanvasAndPost(c);
                           }
                    }

                    sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
                    try {
                           if (sleepTime > 0)
                                  sleep(sleepTime);
                           else
                                  sleep(10);
                    } catch (Exception e) {}
             }
       }
}

所以我想要一些在后台滴答作响的东西(秒),而不是thread.wait。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-25 20:23:09

你应该让你的线程正常运行游戏大约60fps,看这个例子:How can I use the animation framework inside the canvas?

如果你想在每一秒做一些事情,那么你可以在onDraw()中计算帧数,在每60帧上这样做,或者如果你需要比每个onDraw()中更高的精度,检查系统时间并在一秒过去的时候做一些事情。

您还应该考虑使用两个方法,一个用于绘制onDraw(),另一个用于从线程调用的游戏逻辑。

票数 0
EN

Stack Overflow用户

发布于 2011-09-25 19:39:46

你可以使用AsyncTask在后台运行一些东西

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7545235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档