Я пытаюсь заставить мой объект двигаться по диагонали в 45 градусов. Когда он попадает на SCREEN WIDTH, он должен подпрыгнуть, я делаю где-то большую ошибку, но не могу понять это.
distance = 0;
etiSpeed = 1;
t2 = SDL_GetTicks();
delta = (t2 - t1) * 0.001;
t1 = t2;
distance += etiSpeed * delta;ball_x = ball_x * distance * ball_x_vel;
ball_y = ball_y * distance * ball_y_vel;
if (ball_x < SCREEN_WIDTH)
{
ball_x_vel = 1;
DrawSurface(screen, ball, ball_x, ball_y);
}
else if (ball_x = SCREEN_WIDTH)
{
ball_x_vel = -1;
DrawSurface(screen, ball, ball_x, ball_y);
}
Ваш неверный тест
if (ball_x = SCREEN_WIDTH)
устанавливает ball_x
положение в SCREEN_WIDTH
который в качестве логического теста будет истинным, и поэтому будет выполнен следующий блок кода. Я думаю, что вы пытались проверить
if (ball_x == SCREEN_WIDTH)
Но это тоже неправильно, должно быть
if (ball_x >= SCREEN_WIDTH)
и даже если это все еще слишком просто, вам нужно переместить мяч, если он находится за кадром.
if (ball_x >= SCREEN_WIDTH)
ball_x = (SCREEN_WIDTH - 1) - (ball_x -(SCREEN_WIDTH-1));
Итак, предположим, у вас есть
#define SCREEN_WIDTH 40
...
ball_x = 40;
if (ball_x >= SCREEN_WIDTH)
ball_x = (SCREEN_WIDTH - 1) - (ball_x -(SCREEN_WIDTH-1));
Это оценивает к 39 — (40-39) = 38, который, когда мяч промахнулся на 1, восстанавливается на 1.