背景循环之间的差距

时间:2017-06-25 22:23:58

标签: java android

我正在尝试学习Android游戏编程。我试图制作一个简单的游戏。我试图循环应用程序的背景。我绘制了2个背景,然后依次在屏幕上滑动。但是,幻灯片之间存在差距。您可以看到以下照片。我该怎么做才能消除差距?

enter image description here

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;

            }

        }

    }

提前感谢您的帮助。

0 个答案:

没有答案