Я пытаюсь нарисовать прыгающий шар с помощью WIN32 GUI, поэтому я определяю 2d вектор для положения шара
и прямоугольная карта с размером моего экрана
struct pos {
float x;
float y;
};
RECT maprect = {0, 0, 800, 600};
pos ballpos;
ballpos.x=300;
ballpos.y=300;
(конечно, я использую класс для 2dvec, и это больше, чем это)
и я рисую эллипс
Ellipse(backbufferDC, (int)ballpos.x-45, (int)ballpos.y-45,
(int)ballpos.x+45, (int)ballpos.y+45);
Теперь, чтобы заставить мой эллипс отскочить, я использую этот код в цикле сообщений, и он отлично работает:
bool balldown = false;
if (ballpos.y > maprect.bottom-40) {
balldown = true;
}
else if (ballpos.y < maprect.top+300) {
balldown = false;
}
if (ballpos.y > maprect.bottom-40) {
balldown = true ;
}
else if(ballpos.y < maprect.top+300) {
balldown = false;
}
if (!balldown) {
vel+=1;
ballpos.y +=3;
}
else {
ballpos.y-=3;
}
Ellipse(bbdc, (int)tankpos.x-45, (int)tankpos.y-45,
(int)tankpos.x+45, (int)tankpos.y+45);
но чтобы она выглядела более реалистично, я решил изменить скорость мяча на ходу
так что я в конечном итоге с этим кодом
float vel;
if (ballpos.y > maprect.bottom-40) {
balldown = true ;
}
else if (ballpos.y < maprect.top+300) {
balldown = false ;
}
if (!balldown) {
vel+=0.5f;
ballpos.y +=vel;
}
else {
vel-=0.5f;
ballpos.y-=vel;
}
Ellipse(bbdc, (int)tankpos.x-45, (int)tankpos.y-45,
(int)tankpos.x+45, (int)tankpos.y+45);
и теперь это выглядит намного лучше, но проблема в том, что мяч просто отскакивает один раз, затем во второй раз он падает на землю и исчезает!