La boucle 
while permet de répéter un portion de code (fnd) plusieurs fois de suite (sans interruption), tant qu'une condition est vraie. Sa forme générale est la suivante :
while Condition do
begin
  Instructions;
end;
On peut, en quelque sorte, la traduire avec des 
if comme ceci :
// DébutWhile
if not Condition do
  // Saute à FinWhile
Instructions;
// Saute à DébutWhile
// FinWhile
Généralement, on veut que la boucle s'arrête au bout d'un moment. Par exemple, cette boucle fait clignoter le joueur 5 fois :
var
  I: Integer;
begin
  I := 0;
  while I < 5 do
  begin
    Player.Hide;
    Sleep(100);
    Player.Show;
    Sleep(100);
    Inc(I);
  end;
end;
Note l'utilisation de 
Inc(I), qui va augmenter I de 1 à chaque tour de boucle. Ceci finira donc par rendre fausse la condition 
I < 5, ce qui arrêtera la boucle.
Maintenant, je ne pense pas qu'une boucle 
while soit adaptée à ton problème. En effet, une boucle 
while doit rester dans le cadre d'une méthode (un 
on..do).
Ce que tu veux, il me semble, c'est un événement récurrent, qui se produit par exemple toutes les 500 ms. Pour ça il faut utiliser les timers, avec des ScheduleNotificationMsg comme dans les MovingMonsters.