Android游戏中的多线程问题
2010-06-29 15:19:00 来源:WEB开发网this.initializeFireflyList(fireflyList, fireflyX, fireflyY);
然后就是整个View里面
Java代码
public FireflyView extends View{
// ..... 不关键方法都省了
// 初始化那个timer的时候就把当前这个实例传过去,方便他调用方法
FireFlyTimerTask timerTask = new FireFlyTimerTask(this, fireflyX, fireflyY);
// 另一个线程,那个timerTask就用这个copyXYArray方法来把已经更新完了的数据发过来,然后这边再弄个拷贝来用
// 就可以避免冲突了
public synchronized void copyXYArray(int x[], int y[]){
// System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
System.arraycopy(x,0,fireflyX,0,MAX_FIREFLY_COUNT);
System.arraycopy(y,0,fireflyY,0,MAX_FIREFLY_COUNT);
}
// 然后在主线程的onDraw里画到屏幕上
public synchronized void onDraw(Canvas canvas){
int fireflyIndex = 0;
for(Firefly drawFirefly : fireflyList){
// 因为我吧XY都拿出来了,所以画的时候就只有把参数传过去了
drawFirefly.draw(fireflyX[fireflyIndex], fireflyX[fireflyIndex],canvas);
fireflyIndex++;
}
}
}
public FireflyView extends View{
// ..... 不关键方法都省了
// 初始化那个timer的时候就把当前这个实例传过去,方便他调用方法
FireFlyTimerTask timerTask = new FireFlyTimerTask(this, fireflyX, fireflyY);
// 另一个线程,那个timerTask就用这个copyXYArray方法来把已经更新完了的数据发过来,然后这边再弄个拷贝来用
// 就可以避免冲突了
public synchronized void copyXYArray(int x[], int y[]){
// System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
System.arraycopy(x,0,fireflyX,0,MAX_FIREFLY_COUNT);
System.arraycopy(y,0,fireflyY,0,MAX_FIREFLY_COUNT);
}
// 然后在主线程的onDraw里画到屏幕上
更多精彩
赞助商链接