最近写一个游戏,在一个SurfaceView上有很多的精灵,这些精灵对象都在不停的更新帧以及绘制的位置,但是我发现游戏运行时候看着总是一卡一卡的。我是这样写的:在surfaceCreated方法中启动了两个线程,一个doComputeThread,一个doDrawThread,doComputeThread中是这样写的:public void run() {
while (true) {
// 更新所有精灵显示的帧
refreshFrame();
// 更新所有精灵的位置
refreshLocation();
try {
Thread.sleep(COMPUTE_SLEEP_TIME);
} catch (Exception ex) {
}
}
}
doDrawThread中是这样写的:
public void run() {
while (true) {
Canvas canvas = myHandler.lockCanvas();
// 绘制背景
drawBackGround(canvas); // 绘制所有的游戏中需要表现的精灵spriteList1,spriteList2,spriteList3...
spriteList1.drawSprite(canvas);
spriteList2.drawSprite(canvas); myHolder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(DRAW_SLEEP_TIME);
} catch (Exception ex) { }
}
}刚接触这个东西,很多东西都不懂,请教一下各位,我的设计思路是否正确,如果正确的话,COMPUTE_SLEEP_TIME以及DRAW_SLEEP_TIME这两个变量的值应该如何控制才能让游戏画面显得流畅。如果设计思路不正确的话,应该怎样处理呢?
在网上搜索了一些相关内容,还是没有头绪。希望大家帮忙看看,先谢谢了。
while (true) {
// 更新所有精灵显示的帧
refreshFrame();
// 更新所有精灵的位置
refreshLocation();
try {
Thread.sleep(COMPUTE_SLEEP_TIME);
} catch (Exception ex) {
}
}
}
doDrawThread中是这样写的:
public void run() {
while (true) {
Canvas canvas = myHandler.lockCanvas();
// 绘制背景
drawBackGround(canvas); // 绘制所有的游戏中需要表现的精灵spriteList1,spriteList2,spriteList3...
spriteList1.drawSprite(canvas);
spriteList2.drawSprite(canvas); myHolder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(DRAW_SLEEP_TIME);
} catch (Exception ex) { }
}
}刚接触这个东西,很多东西都不懂,请教一下各位,我的设计思路是否正确,如果正确的话,COMPUTE_SLEEP_TIME以及DRAW_SLEEP_TIME这两个变量的值应该如何控制才能让游戏画面显得流畅。如果设计思路不正确的话,应该怎样处理呢?
在网上搜索了一些相关内容,还是没有头绪。希望大家帮忙看看,先谢谢了。
解决方案 »
- 求解释AnimationDrawable的一行代码。。
- 安卓下哪只Adapter最靠谱?
- 怎么样把Excel的数据导入到android的SQLite去
- 哪儿可以找到com.google.android.xmppService包
- android 关于线程的问题,希望高手给分析一下
- android 用httpclient访问服务器不传参数直接传值如何写
- 【反汇编软件分享】写了个Android系统下的x86反汇编器,欢迎捧场
- android关于动态添加删除控件的问题
- android studio R文件找不到
- 安卓(android)手机关掉权限会怎样?
- 求几个建议
- 关于android 下SQLite _id does not exist
this.setFocusableInTouchMode(false);怎样让surfaceView不监听触屏事件呢?
1、OOM。这个游戏是由许多关卡组成的,玩家在每次选择一关以后,就得到这一关的所有的会出现的精灵的信息,然后创建这些精灵。在这一关结束之后,全部释放这些对象。但是当我再次进入这一关的时候,随机会出现OOM,在创建之前我用Runtime的totalMemory和freeMemory方法输出总内存和可用内存,发现有时候在出现OOM的时候freeMemory的值还是很大的。不知道怎么回事2、触屏时候游戏延迟很高。应该是手指的触点太不精确了,会产生很多的MotionEvent.ACTION_MOVE的事件,俺这个菜鸟依旧没思路。哪位大神指点下啊。
if (!bitmap.isRecycled()) bitmap.recycle();
1、OOM以及卡的问题都是机器性能问题,测试时候用的是G12、一直触摸屏幕时候延迟确实是因为手指触点不精确,会产生很多的MotionEvent.ACTION_MOVE。