一連の長方形を垂直にスクロールしようとしています。各長方形は、次の長方形から一定の距離を持っています。最初の四角形は画面の上端から 10 ピクセル未満にしないでください。同様に、最後の四角形はテキスト ボックスの上に 20 ピクセル以上離してはなりません。つまり、Windows Phone の SMS アプリケーションを模倣しています。
以下の方法は、理論的には四角形を動的にスクロールする必要がありますが、場合によっては、一部の四角形が本来よりも互いに近くなります (最終的に重なります)。画面のフリックが遅いと効果が大きくなるようです。
private void Flick()
{
int toMoveBy = (int)flickDeltaY;
//flickDeltaY is assigned in the HandleInput() method as shown below
//flickDeltaY = s.Delta.Y * (float)gameTime.ElapsedGameTime.TotalSeconds;
for (int i = 0; i < messages.Count; i++)
{
ChatMessage message = messages[i];
if (i == 0 && flickDeltaY > 0)
{
if (message.Bounds.Y + flickDeltaY > 10)
{
toMoveBy = 10 - message.Bounds.Top;
break;
}
}
if (i == messages.Count - 1 && flickDeltaY < 0)
{
if (message.Bounds.Bottom + flickDeltaY < textBox.Top - 20)
{
toMoveBy = textBox.Top - 20 - message.Bounds.Bottom;
break;
}
}
}
foreach (ChatMessage cm in messages)
{
Vector2 target = new Vector2(cm.Bounds.X, cm.Bounds.Y + toMoveBy);
Vector2 newPos = Vector2.Lerp(new Vector2(cm.Bounds.X, cm.Bounds.Y), target, 0.5F);
float omega = 0.05f;
if (Vector2.Distance(newPos, target) < omega)
{
newPos = target;
}
cm.Bounds = new Rectangle((int)newPos.X, (int)newPos.Y, cm.Bounds.Width, cm.Bounds.Height);
}
}
私はベクトルを本当に理解していないので、これがばかげた質問であれば申し訳ありません。