прокрутка фона в игре android studio.Background движется вправо с мигающим экраном, как это решить - PullRequest
0 голосов
/ 25 января 2020

Я хочу реализовать фон прокрутки в моей игре в android studio.

Моя идея состояла в том, чтобы иметь два растровых изображения, которые нарисованы рядом друг с другом, и сбросить положение растрового изображения, если оно больше не является экраном

  1. Фон перемещается вправо
  2. экран мигает

Как я могу решить свои проблемы?

мой SurfaceView класс

public class GameView extends SurfaceView implements Runnable {

  private Thread thread; // draw + update thread

  int screenx, screeny; // screen size
  Background background1 , background2;

  float screenratiox, screenratioy;

  private boolean isplaying;

  Paint paint;

  public GameView(Context context, int screenx, int screeny) {
    super(context);

    this.screenx = screenx;
    this.screeny = screeny;

    this.screenratiox = 1920f / screenx;
    this.screenratioy = 1080f / screeny;

    background1 = new Background(screenx, screeny, getResources());
    background2 = new Background(screenx, screeny, getResources());

    background2.x = screenx;

    paint = new Paint();
  }

  @Override
  public void run() {
    while (isplaying) {
      update();
      sleep();
      draw();
    }
  }

  public void sleep() {
    try {
      Thread.sleep(17);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  public void resume() {
    isplaying = true ;
    thread = new Thread(this) ;
    thread.start();
  }

  public void pause() {
    try {
      isplaying = false ;
      thread.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  private void update() { //should move the background and reset it, if beyond the screen
    background1.x += 10 * screenratiox; // move
    background2.x += 10 * screenratioy; // move

    if (background1.x + background1.background.getWidth() < 0) {
      background1.x = screenx; //reset x
    } 

    if (background2.x + background2.background.getWidth() < 0) {
      background2.x = screenx; //reset x
    } 
  }

  private void draw () {
    if (getHolder().getSurface().isValid()) {

      Canvas canvas = getHolder().lockCanvas();

      canvas.drawBitmap(background1.background, background1.x, background1.y, paint);
      canvas.drawBitmap(background2.background, background2.x, background2.y, paint);

      getHolder().unlockCanvasAndPost(canvas);
    }
  }
}

мой фоновый класс

public class Background {
  int x = 0, y = 0; // position
  Bitmap background; // image

  Background(int screenx , int screeny , Resources res) {
    background = BitmapFactory.decodeResource(res, R.drawable.background);
    background = Bitmap.createScaledBitmap(background, screenx, screeny, false);
  }
}

1 Ответ

0 голосов
/ 25 января 2020

background1.x + = 10 * screenratiox; // move

background2.x + = 10 * screenratioy; // переместить

буквально означает: переместить x вправо.

Итак

background1.x -= 10 * screenratiox; // move 
background2.x -= 10 * screenratioy; // move
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...