Sto provando a scorrere una serie di rettangoli verticalmente. Ogni rettangolo ha una distanza fissa dalla successiva. Il primo rettangolo non deve mai essere inferiore a 10 pixel dalla parte superiore dello schermo, mentre allo stesso modo l'ultimo rettangolo non deve mai essere più di 20 pixel sopra una casella di testo. In altre parole, sto simulando l'applicazione SMS in Windows Phone.Cinetica che scorre una lista <Rectangle> in XNA
Il metodo di seguito dovrebbe, in teoria, far scorrere i rettangoli cineticamente, e mentre lo fa, in alcuni casi alcuni dei rettangoli si avvicinano l'un l'altro di quanto dovrebbero (eventualmente sovrapposti). L'effetto sembra essere ingrandito quando i film sullo schermo sono lenti.
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);
}
}
Realmente non capisco Vettori quindi mi scuso se questa è una domanda stupida.
Beh in fondo voglio solo essere in grado di scorrere un elenco di cineticamente Oggetti rettangolari basati su input tattili. Questa è un'implementazione XNA di un'interfaccia molto simile a un'applicazione SMS filettata. Inoltre non ho capito bene la tua risposta; Ho aggiunto la condizione if, perché ho letto da qualche parte che 'Lerp' non raggiungerà il bersaglio, ma ci avvicineremo molto, quindi la soglia' omega' è lì in modo che quando si avvicina abbastanza al bersaglio, lo assegna. Potrebbe comunque essere sbagliato. –