2

私は昨日 SDL ライブラリの学習を開始し、いくつか読んで質問した後、左ボタンが押されたときにブロックを描画する非常に単純なプログラムを作成しました。

問題は、マウスを速く動かしたときにポイントをスキップすることです。そのため、線ではなくたくさんの四角形が表示されます。次のスクリーンショットは、マウスを通常の速度で移動させた 1 本の線と、高速で動かしている間に作成された 1 本の線を示しています。

ここに画像の説明を入力

これらすべてのポイントをスキップする原因は何ですか?

コードは次のとおりです。

//keep the window open
while(running){

    //handle events
    while(SDL_PollEvent(&event)){
        switch(event.type){ 

            case SDL_MOUSEBUTTONDOWN:
                //left button down draws black block
                if(event.button.button == SDL_BUTTON_LEFT) boxColor = black;

                //right button "erases" a point
                else
                  if(event.button.button == SDL_BUTTON_RIGHT) boxColor = blue;

                //middle button clears the screen
                else {
                    clearScreen(display,blue);
                    break;
                }

                //where to draw
                drawing = 1;
                boxRect.x = event.button.x - BOX_WIDTH / 2;
                boxRect.y = event.button.y - BOX_HEIGHT / 2;
            break;

            case SDL_MOUSEMOTION:
                //keep drawing if the button is pressed
                if(drawing == 1){
                    boxRect.x = event.motion.x - BOX_WIDTH / 2;
                    boxRect.y = event.motion.y - BOX_HEIGHT / 2;
                }
            break;

            //stop drawing when the button is no longer pressed
            case SDL_MOUSEBUTTONUP:
                drawing = 0;
            break;

            //quit if window closing button is pressed
            case SDL_QUIT:
                running = 0;
            break;

        }
    }
    //draw
    if(drawing == 1){
        SDL_FillRect(display,&boxRect,boxColor);
        SDL_Flip(display);
    }
}
4

1 に答える 1

3

システムは連続したストリームとしてポイントを実際に取得しないため、マウスの位置をポーリングする必要があります。これは、マウスを速く動かしすぎると、2 つのポーリング間の差が十分に大きくなり、ギャップが生じることを意味します。

于 2013-08-09T12:09:42.863 に答える