SDL-为什么移动鼠标会更改按钮状态?

2013年

我在Simple Directmedia层库中遇到问题。下面的代码在按下鼠标按钮时在屏幕上绘制一个块:

SDL_Event event;
while(running){
    while(SDL_PollEvent(&event)){
        while(event.button.state == SDL_PRESSED){

            SDL_PollEvent(&event);

            //where to draw                
            boxRect.x = event.motion.x;
            boxRect.y = event.motion.y;

            //Draw to screen
            SDL_FillRect(display,&boxRect,boxColor);
            SDL_Flip(display);
        }
        // ...
    }
    // ...
}

直到我移动鼠标,它都可以正常工作,为什么移动鼠标会导致event.button.state错误呢?

如何同时使用两者(即在按下按钮的同时保持绘图状态)?

martelel

您的代码存在的问题是您两次调用SDL_PollEvent在此处记录)。如文档中所述:

如果event不为NULL,则将下一个事件从队列中删除,并存储在event指向的SDL_Event结构中。

重新安排代码,例如摆脱第二个代码SDL_PollEvent,创建适当的流程以单击,移动,释放和从输入泵浦中提取渲染,应该会给您这样的东西:

SDL_Event Event;
while(running)
{
    while(SDL_PollEvent(&Event))
    {
        switch(Event.type)
        {
            // Handle your drawing with a simple state machine:
            case SDL_MOUSEBUTTONDOWN:
            {
                if(Event.button.button == SDL_BUTTON_LEFT)
                {
                    if(stateMachine == Released)
                    {
                        // ... begin drawing
                        stateMachine = Dragging
                    }
                }
                break;
            }
            case SDL_MOUSEMOTION:
            {
                if(stateMachine == Dragging)
                {
                    // ... update the extends of your rect
                }
            }
            case SDL_MOUSEBUTTONUP:
            {
                if(Event.button.button == SDL_BUTTON_LEFT)
                {
                    if(stateMachine != Released)
                    {
                        // ... finalize drawing... add the rect to a list? flush it?
                        stateMachine = Released;
                    }
                }
            }
            case SDL_QUIT:
            {
                running = false;
                break;
            }
        }
    }

    // Outside of your event pumping, update the graphics
    SDL_FillRect(display,&boxRect,boxColor);
    SDL_Flip(display);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SDL鼠标请点击

来自分类Dev

SDL-鼠标输入

来自分类Dev

SDL-鼠标输入

来自分类Dev

实时更改纹理sdl

来自分类Dev

按住鼠标按钮绘制SDL / c ++

来自分类Dev

SDL UI菜单按钮-鼠标悬停

来自分类Dev

SDL OpenGL 平滑相机移动

来自分类Dev

为什么SDL_NumJoysticks()永不更新?

来自分类Dev

为什么SDL_NumJoysticks()永不更新?

来自分类Dev

SDL_Texture移动动画

来自分类Dev

C ++ SDL2,移动速度太快

来自分类Dev

使用 SDL2 平滑网格移动?

来自分类Dev

SDL2-为什么SDL_CreateTextureFromSurface()需要渲染器*?

来自分类Dev

SDL按钮/事件停止工作

来自分类Dev

更改SDL2窗口的背景?

来自分类Dev

SDL_mixer.h发生了什么?

来自分类Dev

是什么导致SDL_Renderer无效?

来自分类Dev

为什么Mac上的SDL比Linux慢得多?

来自分类Dev

SDL#:为什么将IntPtr初始化为null?

来自分类Dev

为什么我总是使用openGL 2.1版?[openGL / SDL]

来自分类Dev

为什么 SDL 使 3 个事件提前发生?

来自分类Dev

“ SDL_JoystickOpened”的SDL-2.0对应功能是什么?

来自分类Dev

SDL_HasEvent()和SDL_GetEventState()有什么区别?

来自分类Dev

SDL 和 SDL_image 程序在 Eclipse 中什么都不做

来自分类Dev

SDL2调整窗口大小+鼠标位置

来自分类Dev

SDL2调整窗口+鼠标位置的大小

来自分类Dev

按下键时SDL2无法获得鼠标输入

来自分类Dev

在SDL_Rect C ++中移动播放器

来自分类Dev

如何使用键状态SDL检查是否已释放键