Объект, который я пытаюсь переместить, размазывается

#c #visual-studio #sdl

#c #visual-studio #sdl

Вопрос:

Прямо сейчас я пытаюсь заставить объект food перемещаться. Кто-нибудь может помочь мне понять, почему? Я использую SDL и c , объект успешно перемещается, но в процессе его размазывается. Это мой код здесь. И когда я имею в виду размазывание, это похоже на то, что он добавляет больше квадратов позади него, делая его похожим на размазывание. Я не знаю.

 void create_Rect(SDL_Renderer* amp;renderer, int x, int y, int w, int h, int colorRed, int colorGreen, int colorBlue, int colorA)
{
    SDL_Rect r;
    r.x = x;
    r.y = y;
    r.w = w;
    r.h = h;

    SDL_SetRenderDrawColor(renderer, colorRed, colorGreen, colorBlue, colorA);

    // Render rect
    SDL_RenderFillRect(renderer, amp;r);

    // Render the rect to the screen
    SDL_RenderPresent(renderer);

}



void input(SDL_Renderer* renderer)
{
    Food food = { 15, 15, 200, 200 };// stuct for food object
    while (isRunning)
    {
        SDL_Event event;
        while (SDL_PollEvent(amp;event))
        {
            create_Rect(renderer, food.x_Pos, food.y_Pos, food.Height, food.Width, 0, 0, 255, 255);// the food object

            if (event.type == SDL_QUIT)
                isRunning = false;
            if (event.type == SDL_KEYDOWN)
            {
                switch (event.key.keysym.sym)
                {
                case SDLK_LEFT:
                    food.x_Pos -= 15;
                    cout << "Crouiser1" << endl;
                    break;
                case SDLK_UP:
                    food.y_Pos -= 15;
                    cout << "Crouiser2" << endl;
                    break;
                case SDLK_RIGHT:
                    food.x_Pos  = 15;
                    cout << "Crouiser3" << endl;
                    break;
                case SDLK_DOWN:
                    food.y_Pos  = 15;
                    cout << "Crouiser4" << endl;
                    break;
                case SDLK_ESCAPE:
                    isRunning = false;
                    break;
                }
            }
        }
        SDL_Delay(1);

        SDL_RenderPresent(renderer);
    }

}
 

Комментарии:

1. Я не использовал SDL, но, полагаю, вам нужно очистить и перерисовать экран для каждого кадра

2. @AlanBirtles но когда я это делаю, экран просто становится синим, цветом объекта.

3. Как указано в документации , перед вызовом SDL_RenderClear вам нужно установить для цвета рисования что-то другое.

4. @Botje когда я пытаюсь это сделать, экран просто становится 1 цветным.

5. @Botje спасибо, я думаю, я понял это. Это потому, что у меня было более одного объекта, и я использовал их в функции, поэтому она очищала его для этих объектов, но не для того, что я хотел.