Вам нужно будет отслеживать положение старой камеры и посмотреть, не изменилось ли оно. Так что ваш, если бы:
if(cameraPosition.X != oldCameraPosition.X)
В конце каждого кадра вы хотите обновить переменную oldCameraPosition как таковые:
oldCameraPosition = cameraPosition;
Разница между двумя позициями, как правило, называется дельтой, или скорость , Теперь для прокрутки вы можете вызвать свое обновление с помощью камеры Delta, чтобы вы прокручивали то же (или измененную сумму). Например:
//In Camera.cs
Scrolling.Update(oldCameraPosition - cameraPosition);
//In your scrolling class
void Update(Vector3 offset)
{
background.Position += offset * .5f;
}
Таким образом, каждый раз, когда камера перемещается, фоновая плоскость движется вместе с ней на половинной скорости. Сделайте этот трюк 3 раза с разными модификаторами, и вы получите эффект паралекса.
Обычно вы хотите использовать события для этого, однако для Game Development может быть сделано исключение. Обычно опрос - это путь, так как у вас уже есть игровой цикл, похожий на цикл событий. В любом случае, имеет смысл просто позвонить Scrolling.Update()
всякий раз, когда вы меняете положение своей камеры в первую очередь.
Вам нужно либо зарегистрироваться, чтобы обрабатывать событие в cameraposition, либо по значению X (если они его поддерживают) или запомнить старое значение и сравнить. Я подозреваю, что может быть событие? – Rup
Я действительно не знаю XNA, но ищите что-то вроде события CameraPosition.Change. – phg
Будьте осторожны с событиями в разработке игр. Обычно используется опрос, просто проверяйте состояние каждого кадра. – TJHeuvel