SurfaceView中的线程

时间:2014-03-12 09:26:48

标签: android multithreading surfaceview

我正在Android中制作一款游戏,而且我实际上拥有该游戏的主题:

public class ThreadEscribir extends Thread{
    EscribirJuego pantalla;
    boolean pintar=false;
    SurfaceHolder sh;
    Canvas canvas;
    private static int FPS=10;


    public ThreadEscribir(EscribirJuego v, SurfaceHolder surf){
        pantalla=v;
        sh=surf;
        canvas=new Canvas();
    }


    public void run(){
        //marcamos cada cuanto queremos que se actualice la pantalla
        long ticksPS=1000/FPS;
        long startTime;
        long sleepTime;

    while(pintar){


        startTime=System.currentTimeMillis();
        try{
            canvas=sh.lockCanvas();
            synchronized(pantalla.getHolder()){
                pantalla.onDraw(canvas);
            }
        }

        finally{
            if (canvas!=null)
                sh.unlockCanvasAndPost(canvas);
        }
        //hacemos que el tiempo de refresh de todos los smartphone sea el mismo
        sleepTime=ticksPS-(System.currentTimeMillis()-startTime);
        try{
            if(sleepTime>0)
                sleep(sleepTime);
            else
                sleep(10);
        }catch (Exception ex){

        }
    }


    }

    public void estado(boolean e){
        pintar=e;
    }



}

这很完美,但是现在我需要一个用于我的 surfaceview 位图的线程,用户可以用手指移动,我不知道如何启动它。我使用了相同的代码对于ThreadEscribir,但更改了pantalla.onDraw(canvas) for for for循环调用我必须移动的每个位图的ondraw,但是我不能很好地工作,因为现在位图闪烁并留下痕迹。我怎么能做一个正确的线程?

0 个答案:

没有答案