SDL движение в 45 градусов

Я пытаюсь заставить мой объект двигаться по диагонали в 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);
}

-2

Решение

Ваш неверный тест

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.

2

Другие решения


По вопросам рекламы [email protected]