Ну цикл сам и выполняется, но отрисовки то в нём нет.
Т.е. логика рабочего кода такая:
Цикл бесконечный:
1) Проверяем, если нажали кнопку D: Выставили анимацию.
2) Увеличили координату
3) Рисуем.
4) Возвращаемся в начало цикла.
А у вас в первом коде:
Цикл бесконечный:
1) Проверяем нажат ли пробел.
2) во внутренем while выставили несколько раз анимацию(НО НЕ НАРИСОВАЛИ!) и увеличили координату
3) Рисуем
4) Возвращаемся в начало цикла.
Т.е. вам не нужен внутренний while, вам нужно чтобы весь внешний цикл выполнялся, и т.к. он выполняется постоянно и бесконечно то он и отрисует то что вам нужно. Т.е. вероятно изменить надо так:
Code
Глобальная ВНЕ ЦИКЛА int v1=0;
....
if(KeyCheck(DIK_SPACE))
{
setK=true; //глобальная переменная, изначально false
SetAnimation(anim,curAnim);
v1=x;
}
if(setK)
{
x+=step*12; // step = 0.09, глобальная константа
if((x-v1)>=50)
{
setK=false;
}
}
Попробуйте так.