Я не могу сказать больше о Parallax Scrolling, чем PFG.Действительно, в репозитории есть тестовая папка и несколько пояснений по всему Интернету.Мне понравился этот .Вопрос с фоном действительно легко решить.Эта и другие связанные проблемы могут быть решены с помощью модульной алгебры.Я не буду вдаваться в подробности, потому что когда-то показано очень легко понять.
Представьте, что вы хотите показать компас на экране.У вас есть текстура 1024x16, представляющая кардинальные точки.В основном, у вас есть полоска.Оставляя в стороне соображения относительно реальной ориентации и тому подобного, вы должны отрендерить ее.
Например, ваш видовой экран имеет размер 300x400, и вы хотите, чтобы на экране было 200 пикселей текстуры (чтобы сделать ее более интересной).Вы можете отрисовать его идеально с одной областью, пока не достигнете позиции (1024-200) = 824. Как только вы окажетесь в этой позиции, явно больше нет текстуры.Но так как это компас, очевидно, что как только вы достигнете его конца, он должен начать снова .Так что это ответ.Другая область текстуры сделает свое дело.Диапазон 825-1023 должен быть представлен другим регионом.Второй регион будет иметь размер (1024-pos) для каждого значения pos> 824 && pos <1024 </p>
Этот код предназначен для работы в качестве реального примера компаса.Он очень грязный, поскольку все время работает с относительными позициями из-за преобразования диапазона (0-3,6) в (0-1024).
spriteBatch.begin();
if (compassorientation<0)
compassorientation = (float) (3.6 - compassorientation%3.6);
else
compassorientation = (float) (compassorientation % 3.6);
if ( compassorientation < ((float)(1024-200)/1024*3.6)){
compass1.setRegion((int)(compassorientation/3.6*1024), 0, 200, 16);
spriteBatch.draw(compass1, 0, (Gdx.graphics.getHeight()/2) -(-250 + compass1.getTexture().getHeight()* (float)1.2), Gdx.graphics.getWidth(), 32 * (float)1.2);
}
else if (compassorientation > ((float)(1024-200)/1024*3.6)) {
compass1.setRegion((int)(compassorientation/3.6*1024), 0, 1024 - (int)(compassorientation/3.6*1024), 16);
spriteBatch.draw(compass1, 0, (Gdx.graphics.getHeight()/2) -(-250 + compass1.getTexture().getHeight()* (float)1.2), compass1.getRegionWidth()/200f * Gdx.graphics.getWidth() , 32 * (float)1.2);
compass2.setRegion(0, 0, 200 - compass1.getRegionWidth(), 16);
spriteBatch.draw(compass2, compass1.getRegionWidth()/200f * Gdx.graphics.getWidth() , (Gdx.graphics.getHeight()/2) -(-250 + compass1.getTexture().getHeight()* (float)1.2), Gdx.graphics.getWidth() - (compass1.getRegionWidth()/200f * Gdx.graphics.getWidth()) , 32 * (float)1.2);
}
spriteBatch.end();