我正在使用Android SurfaceView构建2D游戏。当我触摸屏幕时,游戏动画运行缓慢。为什么,以及如何避免这种情况?
触摸事件就像onTouchEvents(MotionEvents ev){ empty };
一样是存根。所有游戏逻辑和图形绘制代码都在run()
类extends Thread
中。
答案 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(); //}
}
这是我使用的基本方法。 那是我的代码。关于它的任何问题?