Вам нужна не функция задержки - иначе вы заморозите основной поток.
Обычно это делается так - запоминается время когда нужно произвести следующее изменение, каждый кадр проверяется не наступило ли это время (currentTime >=targetTime - обязательно неравенством), и если наступило - делаются нужные действия и вычисляется новое время.
Можно все это обернуть в класс таймера.