我正在尝试找出在Android设备上运行滚动背景的最佳方法。目前我使用的方法非常卡顿。我使用线程,但我认为这不是Android平台的最佳选择。
@Override
public void run() {
// Game Loop
while(runningThread){
//Scroll background down
bgY += 1;
try {
this.postInvalidate();
t.sleep(10);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在onDraw函数中,postInvalidate函数会简单地将背景图片向下推。
canvas.drawBitmap(backgroundImage, bgX, bgY, null);
感谢您的提前帮助。
更新: 我已经确定问题所在。问题是我的播放器更新速率与背景滚动同步(看起来很生硬)。这是因为两者都在同一个函数中绘制。我不太确定如何解决这个问题,如果有任何帮助,将不胜感激。例如,将玩家移动与地图滚动分开处理。
此外,我该如何控制 onDraw(canvas)被调用的速度?
提前致谢。
然而,我已经组合了一个不同的运行循环,适用于遇到相同问题的人们。这部分源自 Google 的 jetboy 示例。
以下是我在 surfaceview 中的内部类:
class MapThread extends Thread{
private Map map;
private SurfaceHolder holder;
private boolean run = false;
public MapThread(Map map, SurfaceHolder holder){
this.holder = holder;
this.map = map;
setRunning(true);
}
public void setRunning(boolean run){
this.run = run;
}
@Override
public void run(){
while(run){
try{
Canvas c = null;
try {
c = holder.lockCanvas(null);
synchronized (holder) {
map.onDraw(c);
}
} finally {
if (c != null) {
holder.unlockCanvasAndPost(c);
}
}
}
}
}
SOLUTION
https://gamedev.stackexchange.com/questions/8127/android-game-scrolling-background