Android游戏中的多线程问题
2010-06-29 15:19:00 来源:WEB开发网前段时间注册了market账号,最近一直在学习,在写一个游戏的时候遇到个问题,虽然其实不用多线程貌似游戏中的那点计算量也不会导致ANR啦,但是还是心中总想把这个疑问解决了,所以问一下。
假设我有一千个很小的点需要画在屏幕上,让他们就像萤火虫一样飞,虽然点很小,但对一千个东西的飞行路劲的计算其实还是比较大的计算量吧?我就考虑到多线程,但是就想到两种方式,我个人觉得应该是第二种要好些,但是不敢确定,就想请教下各位。
第一种,最开始想当然想到的双线程:
我用ArrayList来保存我的全部萤火虫,fireflyList里面就是我全部的萤火虫了,然后在主线程的onDraw里面画,用一个 Timer来弄另一个线程,定时每50ms执行一次计算路径的update()方法,主线程自己还是每50ms Handler发个消息,然后在处理消息的方法里调一次invalidate()来让view用onDraw().
Java代码
ArrayList
this.initializeFireflyList(fireflyList);
ArrayList
this.initializeFireflyList(fireflyList);
然后用两个方法来分别计算路径和将萤火虫画在屏幕上,
Java代码
public FireflyView extends View{
// ..... 不关键方法都省了
// 初始化那个timer的时候就把当前这个实例传过去,方便他调用方法
FireFlyTimerTask timerTask = new FireFlyTimerTask(this);
// 另一个线程,那个timerTask就用这个update方法来计算萤火虫路径,其实就是萤火虫的x和y啦
public synchronized void update(){
for(Firefly updateFirefly : fireflyList){
updateFirefly.update(); // 都是叫每个萤火虫自己去计算自己下一个时刻的坐标的啦
}
}
// 然后在主线程的onDraw里画到屏幕上
public synchronized void onDraw(Canvas canvas){
for(Firefly drawFirefly : fireflyList){
drawFirefly.draw(canvas); // 都是叫每个萤火虫自己去画自己啦
更多精彩
赞助商链接