在 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 中。
这是我的功能:
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 中。