WEB开发网
开发学院手机开发Android 开发 Android游戏中的多线程问题 阅读

Android游戏中的多线程问题

 2010-06-29 15:19:00 来源:WEB开发网   
核心提示:前段时间注册了market账号,最近一直在学习,Android游戏中的多线程问题,在写一个游戏的时候遇到个问题,虽然其实不用多线程貌似游戏中的那点计算量也不会导致ANR啦,Java代码public FireflyView extends View{// ..... 不关键方法都省了// 初始化那个timer的时候就把当

前段时间注册了market账号,最近一直在学习,在写一个游戏的时候遇到个问题,虽然其实不用多线程貌似游戏中的那点计算量也不会导致ANR啦,但是还是心中总想把这个疑问解决了,所以问一下。

假设我有一千个很小的点需要画在屏幕上,让他们就像萤火虫一样飞,虽然点很小,但对一千个东西的飞行路劲的计算其实还是比较大的计算量吧?我就考虑到多线程,但是就想到两种方式,我个人觉得应该是第二种要好些,但是不敢确定,就想请教下各位。

第一种,最开始想当然想到的双线程:

我用ArrayList来保存我的全部萤火虫,fireflyList里面就是我全部的萤火虫了,然后在主线程的onDraw里面画,用一个 Timer来弄另一个线程,定时每50ms执行一次计算路径的update()方法,主线程自己还是每50ms Handler发个消息,然后在处理消息的方法里调一次invalidate()来让view用onDraw().

Java代码

ArrayList fireflyList = new ArrayList(MAX_FIREFLY_COUNT); //MAX_FIREFLY_COUNT = 1000啦

this.initializeFireflyList(fireflyList);

ArrayList fireflyList = new ArrayList(MAX_FIREFLY_COUNT); //MAX_FIREFLY_COUNT = 1000啦

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); // 都是叫每个萤火虫自己去画自己啦

1 2 3 4 5  下一页

Tags:Android 游戏 线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接