2012-05-10 4 views
0

Я делаю игру с XNA. У меня есть камера, мой фон и класс прокрутки, готовый к работе.Есть ли функция «If (X увеличение)»?

Все, чего мне не хватает, - это прокрутить прокрутку, когда положение камеры изменится. Есть ли заявление для этого?

Как:

if (cameraposition.X ""Increases"") 
{ 
    Scrolling.Update() 
} 

Спасибо.

+2

Вам нужно либо зарегистрироваться, чтобы обрабатывать событие в cameraposition, либо по значению X (если они его поддерживают) или запомнить старое значение и сравнить. Я подозреваю, что может быть событие? – Rup

+2

Я действительно не знаю XNA, но ищите что-то вроде события CameraPosition.Change. – phg

+0

Будьте осторожны с событиями в разработке игр. Обычно используется опрос, просто проверяйте состояние каждого кадра. – TJHeuvel

ответ

6

Вам нужно будет отслеживать положение старой камеры и посмотреть, не изменилось ли оно. Так что ваш, если бы:

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() всякий раз, когда вы меняете положение своей камеры в первую очередь.

+4

Для чистого «увеличения», сделайте 'if (cameraPosition.X> oldCameraPosition.X)' – Attila

+0

Возможно, я зашел за борт. – TJHeuvel

+0

@Attila: положение камеры тоже может уменьшиться, поэтому! = Правильный выбор. Если есть * разность *, выберите эту * разницу * и примените ее для прокрутки: это логика, в основном. – Tigran

3

Это, естественно, выбор производительности, но что, если вы просто говорите:

Scrolling.Update(cameraPosition.X, cameraPosition.Y) 

Если скроллинг уже в действительном положении, ничего не изменится.

Должно быть измерено, естественно, перед использованием. Таким образом, вы избежите хранить состояния переменных или дополнительных переменных для хранения «старой» информации.

+0

Хорошая альтернатива, но это может вызвать проблемы, если вы хотите облегчить новую позицию. Часто позиция, которую вы останавливаете, не будет точно такой же, как и желаемая позиция, поэтому фоны могут заикаться много. – TJHeuvel