2015-01-08 7 views
-2

Я пытаюсь заставить мой объект двигаться по диагонали в 45 градусов. Когда он нажимает SCREEN WIDTH, он должен подпрыгивать, im делает какую-то большую ошибку, но не может понять это.sdl движение в 45 градусов

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.

Смежные вопросы