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

Android游戏中的多线程问题

 2010-06-29 15:19:00 来源:WEB开发网   
核心提示:public synchronized void onDraw(Canvas canvas){int fireflyIndex = 0;for(Firefly drawFirefly : fireflyList){// 因为我吧XY都拿出来了,所以画的时候就只有把参数传过去了drawFirefly.draw(firef

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[]){

// 这个引用是用来方便面把数据穿过去用的

上一页  1 2 3 4 5  下一页

Tags:Android 游戏 线程

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