繁体   English   中英

如何使用C在SDL2中移动矩形

[英]How to move a rectangle in SDL2 using C

我无法移动程序中创建的矩形。 运行程序时,编译器中没有错误消息。 您能告诉我我在键盘事件中错过了什么吗? 我分配给窗口的其他事件运行正常。 不用写下说明,您可以告诉我解决方案。 我一直在这方面。 谢谢

#include <SDL.h>
#include <stdlib.h>

int main()
{
    SDL_Window *o;
    SDL_Renderer *r;
    SDL_Event e;
    SDL_Rect q;
    int i =1;

    SDL_Init(SDL_INIT_VIDEO);

    o = SDL_CreateWindow("Game test",
                            SDL_WINDOWPOS_UNDEFINED,
                            SDL_WINDOWPOS_UNDEFINED,
                            1024,
                            800,
                            SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);

    r = SDL_CreateRenderer(o, -1,SDL_RENDERER_ACCELERATED);

    while(i)
    {
        while(SDL_PollEvent(&e) !=0)
        {
            if(e.type == SDL_QUIT)
                i=0;
            else if(e.type == SDL_KEYDOWN)
            {
                switch(e.key.keysym.sym)
                {
                case SDLK_ESCAPE:
                case SDLK_q:
                    i=0;
                break;
                case SDLK_UP:
                    q.y -=10;
                break;
                case SDLK_DOWN:
                    q.y +=10;
                break;
                case SDLK_RIGHT:
                    q.x +=10;
                break;
                case SDLK_LEFT:
                    q.x -=10;
                break;
                }
            }
        }
        SDL_SetRenderDrawColor(r,0,0,255,255);
        SDL_RenderClear(r);
        // Creating the rectangle
        q.x=475;
        q.y=700;
        q.h=50;
        q.w=50;

        SDL_SetRenderDrawColor(r,0,0,0,255);

        SDL_RenderFillRect(r,&q);

        SDL_RenderPresent(r);
    }

    SDL_DestroyWindow(o);
    SDL_DestroyRenderer(r);
    SDL_Quit();

    return 0;
}

您没有初始化矩形对象:

SDL_Rect q;

可能在事件循环中修改其值之前,这将导致未定义的行为:

case SDLK_UP:
    q.y -=10;
break;

然后,当您为其设置常量值时,对该对象所做的任何更改都将无效:

q.x=475;
q.y=700;
q.h=50;
q.w=50;

因此解决方案很明确,仅在定义对象时才将常量值设置为对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM