Android Surface上的2D游戏在触摸时运行缓慢

时间:2010-08-30 01:05:07

标签: android 2d

我正在使用Android SurfaceView构建2D游戏。当我触摸屏幕时,游戏动画运行缓慢。为什么,以及如何避免这种情况?

触摸事件就像onTouchEvents(MotionEvents ev){ empty };一样是存根。所有游戏逻辑和图形绘制代码都在run()extends Thread中。

3 个答案:

答案 0 :(得分:6)

将UI线程休眠16-20ms将使触摸事件处理代码每秒被调用太多次。

示例:

@Override
public boolean onTouchEvent(MotionEvent event) {

 //Event handling logic

    try {
        Thread.sleep(16);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return true;
}

触摸事件的调度与UI线程可以读取它们一样快,通过休眠线程,您可以跳过多个事件派发。 (虽然对你的游戏逻辑或用户来说不是一个明显的数额)

答案 1 :(得分:0)

你看过http://www.droidnova.com的教程了吗?他们是很好的介绍游戏,并且当我做它们时跑得很快。如果它们在您的设备上运行缓慢,则可能不是开发问题

答案 2 :(得分:0)

@Override
public void run ( )
{
    while(irunning)
    {
        while(paused)
        {
            sleep(2);
            synchronized ( holder )
            {
                    canvas = holder.lockCanvas(null);
                    //updateEvents();
                    //updatePsgstate();
                    //updateRole();
                    sortImages();
                    drawBgland();
                    drawImages();
                    drawAdminicle();
                    holder.unlockCanvasAndPost(canvas);                         
            }

        }
        sleep(10);
    }

}



@Override
public boolean dispatchTouchEvent ( MotionEvent ev )
{
    try
    {
        Thread.sleep( 32 );
    }
    catch ( InterruptedException e )
    {           
        e.printStackTrace();
    }
    synchronized ( ev )
    {
        Log.i( "T" , "onTouch" );
    }
    return true;
}


@Override
public void surfaceCreated(SurfaceHolder holder) 
{               
    mThread.start();

// if(hasFocus()) // { //返回; //} //别的 // { // requestFocusFromTouch(); //}

}

这是我使用的基本方法。 那是我的代码。关于它的任何问题?