2016-08-18 3 views
0

Я создаю фон, используя Inkscape, и я использую два одинаковых изображения этого фона, чтобы показать движущийся фон, но между ними появляется строка, когда я запускаю игру, любые решения?Libgdx Прокрутка Внешний вид линии

Picture for the problem in a background the line appears and disappears

Picture for the problem in another background ; the repeat of background is clear

Для уточнения более это мой фон код:

public class Background extends Actor { 


     private final TextureRegion textureRegion; 
     private Rectangle textureRegionBounds1; 
     private Rectangle textureRegionBounds2; 
     private int speed = 70; 

     public Background() { 
      textureRegion = new TextureRegion(new Texture(Gdx.files.internal(Constants.BACKGROUND_IMAGE_PATH))); 
      textureRegionBounds1 = new Rectangle(-800/2, 0, 800,480); 
      textureRegionBounds2 = new Rectangle(800/2, 0, 800, 480); 
     } 

     @Override 
     public void act(float delta) { 
      if (leftBoundsReached(delta)) { 
       resetBounds(); 
      } else { 
       updateXBounds(-delta); 
      } 
     } 

     @Override 
     public void draw(Batch batch, float parentAlpha) { 
      super.draw(batch, parentAlpha); 
      batch.draw(textureRegion, textureRegionBounds1.x, textureRegionBounds1.y, 800,480); 
      batch.draw(textureRegion, textureRegionBounds2.x, textureRegionBounds2.y, 800,480); 
     } 

     private boolean leftBoundsReached(float delta) { 
      return (textureRegionBounds2.x - (delta * speed)) <= 0; 
     } 

     private void updateXBounds(float delta) { 
      textureRegionBounds1.x += delta * speed; 
      textureRegionBounds2.x += delta * speed; 
     } 

     private void resetBounds() { 
      textureRegionBounds1 = textureRegionBounds2; 
      textureRegionBounds2 = new Rectangle(800, 0, 800, 480); 
     } 

    } 

в настройках класса камеры GameStage:

... 
     private static final int VIEWPORT_WIDTH = 800; 
     private static final int VIEWPORT_HEIGHT = 480; 
... 
    public GameStage(){ 
      super(new ScalingViewport(Scaling.stretch, VIEWPORT_WIDTH, VIEWPORT_HEIGHT, 
        new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT))); 
      Gdx.input.setInputProcessor(this); 
      // renderer = new Box2DDebugRenderer(); 
      setUpWorld(); 
      setupCamera(); 

     } 
... 
private void setupCamera() { 
     camera = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 
     camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0f); 
     camera.update(); 
    } 
... 
+0

Эти изображения в атласе текстуры, или они загружаются из отдельных файлов изображений во время выполнения? Какую текстурную фильтрацию вы используете? – Tenfour04

+0

спасибо за ваш комментарий, я использую TextureRegion, я отредактировал свой вопрос u могу понять меня более –

ответ

0

Вы, вероятно, вычисление неправильно, потому что вы получил колонку черного цвета точки справа.

Будьте осторожны, если вы рассчитываете в соответствии с правом экрана, чтобы он не был шириной. Это будет ширина-1, потому что x начинается с нуля.

Но это не только ошибка, которая у вас есть. Но я не могу угадать другие ошибки только от картины. Было бы лучше, если бы вы предоставили некоторую треску, фильтры, которые вы применяете, или исходную текстуру, которую вы использовали.

+0

спасибо, я думаю, что координаты верны, я отредактировал свой вопрос с кодом –

0

Ваш метод resetBounds() вводит ошибку в промежутке между двумя прямоугольными областями. Когда leftBoundsReached() вернет true, положение ваших границ области 2 не будет точным кратным 400 или 800 или любым другим интервалом, который вы используете. Но resetBounds() создает новый набор границ, которые точно в точке х = 800.

Я хотел бы предложить что-то вроде этого:

private void resetBounds() { 
     Rectangle tmp = textureRegionBounds1; 
     textureRegionBounds1 = textureRegionBounds2; 
     textureRegionBounds2 = tmp; 
     textureRegionBounds2.x = textureRegionBounds1.x + textureRegionBounds1.width; 
    } 

Кстати, я думаю, что ваш метод act будет производить, возможно, видимое заикание всегда, когда левые границы достигнуты, потому что вы не перемещаете фон на этом фрейме. Фон должен быть перемещен на каждом кадре независимо от того, пришло ли время пропустить прямоугольник.

+0

благодарю вас за ответ, я попробую ваш метод resetBounds, но i stille имеет ту же самую пробку линии, plz, если есть другие решения, чтобы получить хорошее шоу для прокрутки фона, скажите мне их –

Смежные вопросы