在 Sdl C++ 中旋转后的运动

Motion After Rotation In Sdl C++

这是我的功能:

void main_loop(){
SDL_Surface* image;
image=SDL_LoadBMP("plane.bmp");
plane=SDL_CreateTextureFromSurface(renderer,image);
double angle=90;
int speed=1;
SDL_Event event;


bool quit=false;
while(!quit){
    while(SDL_PollEvent(&event)!=0){
        if(event.type==SDL_QUIT)
            quit=true;
        if(event.type==SDL_KEYDOWN){
            switch(event.key.keysym.sym){
                case SDLK_RIGHT:
                    angle+=90*delta;
                    break;
                case SDLK_LEFT:
                    angle-=90*delta;
                    break;
            }
        }

    }
   //update_delta();
   int angle_rad=angle*PI/180;
    x+=sin(angle_rad)*speed*delta;
    y-=cos(angle_rad)*speed*delta;
    draw((int)x,(int)y,angle);
}
last_time=SDL_GetTicks()/1000;
return;

 }

void draw(Uint32 x,Uint32 y,double angle){
SDL_RenderClear(renderer);
SDL_Rect rect;
rect.x=x;
rect.y=y;
rect.h=100;
rect.w=100;
SDL_RenderCopyEx(renderer,plane,NULL,&rect,angle,NULL,SDL_FLIP_NONE);
SDL_SetRenderDrawColor(renderer,0,0,0,255);
SDL_RenderPresent(renderer);
}

基本上我想做的是旋转纹理,并以固定的速度朝它所面对的方向移动。 delta 值是两帧之间的时间,我用它来计算每帧 x 和 y 坐标的增量。但是,角度存在一些问题。纹理没有正确移动,而是以某种尴尬的角度移动,看起来像是在漂移。到目前为止,我已经尝试过改变三角函数,否定 x 和 y,但它根本不起作用。

我在 C++ 中使用 SDL 2.0。

int angle_rad=angle*PI/180;

您的弧度以整数形式存储,因此它们将被截断为最接近的整数。将它们存储在 float 或 double 中。