Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void rotate_point(float cx, float cy, float angle, int *px,int *py) {
- *px = cos(angle) * (*px - cx) - sin(angle) * (*py - cy) + cx;
- *py = sin(angle) * (*px - cx) + cos(angle) * (*py - cy) + cy;
- }
- int main(int argc, char* argv[])
- {
- if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
- {
- std::cout << "SDL initialization failed. SDL Error: " << SDL_GetError();
- }
- else
- {
- std::cout << "SDL initialization succeeded!";
- }
- SDL_Surface* screen_surface = NULL;
- SDL_Window* window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED,
- SDL_WINDOWPOS_UNDEFINED, 1024, 768,
- SDL_WINDOW_SHOWN);
- SDL_Rect es = { 0,0,1024,768 };
- bool quit = false;
- SDL_Event event;
- SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- int sX = 1, sY = 1;
- SDL_Texture* shp = IMG_LoadTexture(renderer, "K:\\spaceship.png");
- double sRot = 0.0;
- SDL_Rect SrcR,dest;
- SrcR.x = 0;
- SrcR.y = 0;
- SrcR.w = 600;
- SrcR.h = 600;
- dest.x = 300;
- dest.y = 300;
- dest.w = 60;
- dest.h = 60;
- double K = sRot * (M_PI / 180.0);
- int xA= dest.x, yA= dest.y;
- int rX, rY;
- while (!quit)
- {
- xA = dest.x + dest.w / 2;
- yA = dest.y + dest.h / 2;
- rX = dest.x;
- rY = dest.y;
- SDL_PollEvent(&event);
- switch (event.type)
- {
- case SDL_QUIT:
- quit = true;
- break;
- case SDL_KEYDOWN:
- {
- switch (event.key.keysym.sym)
- {
- case SDLK_UP:
- {
- dest.y = dest.y - 1 * cos(K * -1);
- dest.x = dest.x - 1 * sin(K * -1);
- printf("x %d y %d %f\n", dest.x, dest.y,K*-1);
- }break;
- case SDLK_DOWN:
- {
- dest.y = dest.y + 1 * cos(K*-1);
- dest.x = dest.x + 1 * sin(K*-1);
- printf("x %d y %d %f\n", dest.x, dest.y, K*-1);
- }break;
- case SDLK_LEFT:
- {
- sRot = sRot - 1.0;
- K = sRot / (180.0 / M_PI);
- //printf("%lf\n",K );
- }break;
- case SDLK_RIGHT:
- {
- sRot = sRot + 1.0;
- K = sRot / (180.0 / M_PI);
- //printf("%lf\n", K );
- }break;
- }
- }break;
- }
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
- SDL_RenderFillRect(renderer, &es);
- SDL_Delay(10);
- SDL_RenderCopyEx(renderer, shp, &SrcR, &dest, sRot, NULL, SDL_FLIP_HORIZONTAL);
- SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
- rotate_point(xA, yA, K, &rX,&rY);
- SDL_RenderDrawLine(renderer, xA/*dest.x + dest.w / 2*/,yA /*dest.y*/, xA - 100 * sin(K * -1), yA - 100 * cos(K * -1));
- SDL_SetRenderDrawColor(renderer, 255, 0, 0, SDL_ALPHA_OPAQUE);
- SDL_RenderDrawLine(renderer, rX,rY, rX - 100 * sin(K * -1), rY - 100 * cos(K * -1));
- SDL_RenderPresent(renderer);
- }
- // cleanup SDL
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement