我正在尝试学习Android游戏编程。我试图制作一个简单的游戏。我试图循环应用程序的背景。我绘制了2个背景,然后依次在屏幕上滑动。但是,幻灯片之间存在差距。您可以看到以下照片。我该怎么做才能消除差距?
GameSurfaceView.class
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameSurfaceView extends SurfaceView implements Runnable{
private SurfaceHolder SurfaceHolder;
private boolean play = true;
private Thread _thread;
private Background background = new Background();
private Canvas canvas;
public GameSurfaceView(Context context) {
super(context);
background.Object(context);
SurfaceHolder = getHolder();
SurfaceHolder.setFixedSize(1280, 720);
}
@SuppressLint("WrongCall")
protected void Drawing(Canvas canvas) {
background.Drawing(canvas);
}
@Override
public void run() {
while (play) {
Canvas canvas = null;
if(!SurfaceHolder.getSurface().isValid()){ continue; }
try{
canvas = SurfaceHolder.lockCanvas();
synchronized(SurfaceHolder){
Drawing(canvas);
}
}
finally{
if (canvas != null) {
SurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
public void pause() {
play = false;
while (true) {
try {
_thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
_thread = null;
}
public void resume() {
play = true;
_thread = new Thread(this);
_thread.start();
}
}
Background.class
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.SystemClock;
public class Background extends Thread{
private boolean mPlay = false;
private Bitmap background;
private int background1x = 0;
private int background2x = 1280;
private Paint paint = new Paint();
private boolean once = true;
long laststep;
long now = SystemClock.uptimeMillis();
private Thread backgroundposition = new Thread(this);
public Background(Boolean mPlay){
this.mPlay = mPlay;
backgroundposition.start();
}
public void Object(Context mContext){
background = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.background);
}
public void Drawing(Canvas mCanvas){
Bitmap scaledBitmap = Bitmap.createScaledBitmap(background,mCanvas.getWidth(),145,true);
mCanvas.drawBitmap(scaledBitmap, background1x, mCanvas.getHeight() - 145, paint);
mCanvas.drawBitmap(scaledBitmap, background2x, mCanvas.getHeight() - 145, paint);
}
@Override
public void run(){
if(once){
while(mPlay) {
now = SystemClock.uptimeMillis();
if(now - laststep >= 10){
background2x = background2x-1;
background1x = background1x-1;
if(background2x==0){
background1x = 1280;
}
if(background1x==0){
background2x = 1280;
}
laststep = SystemClock.uptimeMillis();
}
}
once = false;
}
}
}
提前感谢您的帮助。