Android游戏中的多线程问题
2010-06-29 15:19:00 来源:WEB开发网public synchronized void onDraw(Canvas canvas){
int fireflyIndex = 0;
for(Firefly drawFirefly : fireflyList){
// 因为我吧XY都拿出来了,所以画的时候就只有把参数传过去了
drawFirefly.draw(fireflyX[fireflyIndex], fireflyX[fireflyIndex],canvas);
fireflyIndex++;
}
}
}
TimerTask也就需要贴一下了。
Java代码
public class GameTimerTask extends TimerTask {
private FireflyView fireflyView;
// 这两个数组就用来进行萤火虫实际坐标的计算
private int calculateX[] = new int[FireflyView.MAX_FIREFLY_COUNT];
private int calculateY[] = new int[FireflyView.MAX_FIREFLY_COUNT];
// 构造器而已
public GameTimerTask(FireflyView fireflyView, int x[], int y[]){
// 这个引用是用来方便面把数据穿过去用的
this.fireflyView= fireflyView;
// 在最开始初始化这个task的时候就把传过来的坐标复制出来用,免得两个线程冲突
System.arraycopy(x,0,calculateX,0,FireflyView.MAX_FIREFLY_COUNT);
System.arraycopy(y,0,calculateY,0,FireflyView.MAX_FIREFLY_COUNT);
}
@Override
public void run() {
// 更新坐标,此时应该不影响另一个主线程的draw动作
this.updateXY();
// 坐标更新完了之后把新坐标给主线程复制一份,让他画。
// 不过如果这个时候主线程正在画图的话,这个调用也就只有阻塞了
fireflyView.copyXYArray(bufferX, bufferY);
}
}
public class GameTimerTask extends TimerTask {
private FireflyView fireflyView;
// 这两个数组就用来进行萤火虫实际坐标的计算
private int calculateX[] = new int[FireflyView.MAX_FIREFLY_COUNT];
private int calculateY[] = new int[FireflyView.MAX_FIREFLY_COUNT];
// 构造器而已
public GameTimerTask(FireflyView fireflyView, int x[], int y[]){
// 这个引用是用来方便面把数据穿过去用的
更多精彩
赞助商链接