2

私は C++ 用の SFML ライブラリを使い始めています。

私の質問は、どうすればキーボードでオブジェクトをスムーズに移動できますか?

#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>

using namespace sf;

const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;

int main(){
VideoMode VMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32);
RenderWindow screen(VMode, "Empty Window");
Event event;
Keyboard key;
Color screencolor(0,150,0);
Texture pietexture;
pietexture.loadFromFile("image.png");
Sprite pie(pietexture);
pie.setPosition(150,150);
screen.draw(pie);
screen.display();
bool on = true;
while(on){
    screen.clear(Color(0,255,0));
    while(screen.pollEvent(event)){
        if(event.type == Event::Closed){
            screen.close();
            on = false;
        }
        else if(event.type == Event::KeyPressed){
            if(key.isKeyPressed(Keyboard::Left)){
                pie.move(-10,0);
            }
            if(key.isKeyPressed(Keyboard::Right)){
                pie.move(10,0);
            }
            if(key.isKeyPressed(Keyboard::Up)){
                pie.move(0,-10);
            }
            if(key.isKeyPressed(Keyboard::Down)){
                pie.move(0,10);
            }

        }
    }
    screen.draw(pie);
    screen.display();
}

}

現在行っていることは、キーを押した後に少し一時停止してから正常に動作することですが、最初に少し一時停止せずにそれを行うにはどうすればよいですか。

4

2 に答える 2

2

キー押下イベントでオブジェクトを移動する代わりに、移動する方向と速度を示す変数を設定します。次に、キー リリース イベントで、速度を 0 にリセットします。次に、これらの変数とある種のタイミング システムの組み合わせによって規制される、イベント処理セクションとは別に動きを処理します。

于 2013-01-13T08:09:02.830 に答える
1

sf::Keyboard::isKeyPressed(key)キーのステータスをリアルタイムでポーリングするために使用します。経験則として、応答性の高いインターフェイスが必要な場合はイベントを使用しないでください。

また、速度を調整するためのタイミング メカニズムも必要になります。sf::Clockこの目的で使用できる があります。

于 2013-01-13T10:32:10.303 に答える