Я не могу сказать больше о Parallax Scrolling, чем PFG. Действительно, в репозитории под тестовой папкой есть пример и несколько пояснений в Интернете. Мне понравился этот . Вопрос с фоном действительно решается просто. К этой и другим родственным проблемам можно подойти, используя модульную алгебру. Я не буду вдаваться в подробности, потому что когда-то показанный, очень легко понять.
Представьте, что вы хотите показать на экране компас. У вас есть текстура 1024x16, представляющая стороны света. Практически все, что у вас есть, - это полоска. Отбросив в сторону соображения об истинной ориентации и тому подобном, вы должны это воспроизвести.
Например, ваше окно просмотра имеет размер 300x400, и вы хотите, чтобы на экране отображалось 200 пикселей текстуры (чтобы сделать его более интересным). Вы можете идеально визуализировать его с одной областью, пока не достигнете позиции (1024-200) = 824. Как только вы находитесь в этой позиции, очевидно, что текстуры больше нет. Но поскольку это компас, очевидно, что, когда вы дойдете до его конца, он должен запуститься снова. Вот и ответ. Другая область текстуры подойдет. Диапазон 825-1023 должен быть представлен другим регионом. Вторая область будет иметь размер (1024 позиции) для каждого значения pos> 824 && pos ‹1024
Этот код предназначен для работы как реальный пример компаса. Он очень грязный, поскольку постоянно работает с относительными позициями из-за преобразования диапазона (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();
person
Community
schedule
24.01.2012