C++ sdl以45度角运动
我试着让我的物体以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
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