Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sdl以45度角运动_C++_C_Sdl_Motion - Fatal编程技术网

C++ sdl以45度角运动

C++ sdl以45度角运动,c++,c,sdl,motion,C++,C,Sdl,Motion,我试着让我的物体以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 * di

我试着让我的物体以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);       
    }
distance=0;
速度=1;
t2=SDL_GetTicks();
δ=(t2-t1)*0.001;
t1=t2;
距离+=速度*增量;
ball_x=ball_x*距离*ball_x水平;
ball_y=ball_y*距离*ball_y水平;
如果(球x<屏幕宽度)
{
ball_x_vel=1;
抽油面(滤网、钢球、钢球x、钢球y);
}
否则如果(球x=屏幕宽度)
{
ball_x_vel=-1;
抽油面(滤网、钢球、钢球x、钢球y);
}
您的测试不正确

if (ball_x = SCREEN_WIDTH)
正在将
ball\u x
位置设置为
SCREEN\u 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