写了一个游戏,当执行触摸操作的时候,游戏帧数明显下降有用到多线程,游戏逻辑及绘图都在一个新建的线程里执行。大致代码如下,现在不知道是不是线程阻塞引起的,要怎么解决,请高手帮忙!public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder mHolder;
public GameSurfaceView(Context context) { //
super(context);
con = context;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
setFocusable(false);
setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent me)
{
if(me.getAction() == MotionEvent.ACTION_DOWN) {
float x = me.getX();
float y = me.getY();
Touch(x,y)
}
else if(me.getAction() == MotionEvent.ACTION_UP) {
float x = me.getX();
float y = me.getY();
Touch(x,y)
}
else if(me.getAction() == MotionEvent.ACTION_MOVE)
{
float x = me.getX();
float y = me.getY();
Touch(x,y) }
return true;
}
class GameThread extends Thread {
@Override
public void run() {
while(1)
{
GameRun();
GamePaint();
}
}
}
}
{
private SurfaceHolder mHolder;
public GameSurfaceView(Context context) { //
super(context);
con = context;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
setFocusable(false);
setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent me)
{
if(me.getAction() == MotionEvent.ACTION_DOWN) {
float x = me.getX();
float y = me.getY();
Touch(x,y)
}
else if(me.getAction() == MotionEvent.ACTION_UP) {
float x = me.getX();
float y = me.getY();
Touch(x,y)
}
else if(me.getAction() == MotionEvent.ACTION_MOVE)
{
float x = me.getX();
float y = me.getY();
Touch(x,y) }
return true;
}
class GameThread extends Thread {
@Override
public void run() {
while(1)
{
GameRun();
GamePaint();
}
}
}
}
解决方案 »
- android SQLite中数据库查询,如何查询一段时间内的记录
- 求高手解决布局问题,急。。。。
- 用android 获取当前本地文件、文件夹,并显示在listview上,点击文件夹,显示该文件夹下的文件和文件夹?详解
- 关于keycode处理的需求
- Eclipse 在debug android程序的时候找不到源文件。。。
- could not find folder tools inside sdk
- android中的SerialService使用
- listview中的textview跑马灯效果失效
- eclipse百度地图包一段代码,求解读
- as3怎么设置依赖库版本和编译器版本什么的?
- OPhone应用开发专题——【第一季】(转)
- hero编译出错,请指教,谢谢
还有 单从你以上代码看 没看出什么问题 而且没发现线程和你的游戏画布类的关系你做onTouchEvent这个方法的时候没必要那样写吧 几个if else都是在做一样的事啊
1. onTouchEvent中,没有设置不响应区域。这样会造成在触摸点下时,连续发出keyevent_down和keyevent_move的消息,导致onTouch这个函数处理速度降低。
2. 是否起了过多的线程,出现了线程等待的情况。
3. 对图像的处理过于耗时。