2016-03-18 5 views
0

Так что я работаю над фоном моего меню, а я Draw() текстура там с прямоугольником. Как у меня будет прямоугольник ждать, двигаться вверх, а затем вниз, ждать и повторять? Я попытался следующие:Monogame - как автоматически перемещать прямоугольник вверх и вниз и повторять?

// Update() 
if (Rectangle.Y = -16) // My texture is positioned to -16 initially 
    Rectangle.Y++; 
else if (Rectangle.Y = 0) 
    Rectangle.Y--; 

Так мое разрешение игры 1366x768. Чтобы фоновая текстура двигалась вверх и вниз, мне пришлось сделать ее height > 768. Я сделал это 1366x800. Каждый раз, когда вызывается вышеуказанный код, он должен ждать 1-2 секунды (еще не реализовано), переместить 16 пикселей вниз, снова подождать и вернуться на 16 пикселей вверх ... Но этот код не работает ... Можете ли вы направить меня как как это делается?

+0

Хороший способ сделать это состоит в использовании 'Math.Sin' – LibertyLocked

ответ

0

Вы можете сделать это с помощью Math.Sin, что даст вам плавный переход от -1 к 1. Вам нужно будет сохранить копию положения Y вашего прямоугольника Y.

double time = gameTime.TotalGameTime.TotalSeconds; 
Rectangle.Y = centerY + (int)(Math.Sin(time * transitionSpeed) * maxOffset); 

Вы можете играть с double transitionSpeed, чтобы получить лучший визуальный эффект. int maxOffset - это максимальная величина смещения от центра Y.


Если вы не хотите, плавные движения, то просто сделать

int speed = 1; // speed of movement 

Тогда в обновлении

if (Rectangle.Y <= -16 || Rectangle.Y >= 0) 
    speed *= -1; // reverse move direction 
Rectangle.Y += speed; 
+0

Мне нужны гладкие движения, поэтому я считаю, что 'centerY' является' Rectangle.Height/2; '? 'maxOffset' должно быть' 16'. –

+0

В обоих случаях я также использовал бы кратное 'gameTime.ElapsedGameTime'. – Groo

+0

@JohnyP. 'centerY' должно быть исходной Y-позицией вашего прямоугольника без какого-либо смещения. 'maxOffset' - это то, как далеко вы хотите, чтобы прямоугольник перемещался из центральной позиции. – LibertyLocked