1 minute read

키보드 인풋

키보드 인풋을 받는 방법을 이렇습니다..

sf::Keyboard::isKeyPressed

이 함수를 살펴보자면

sf::Keyboard::isKeyPressed는 SFML에서 제공하는 키보드 입력 처리를 위한 함수 중 하나입니다. 이 함수는 특정 키보드 키가 현재 눌려있는지 확인하는데 사용됩니다.
sf::Keyboard::isKeyPressed 함수는 sf::Keyboard 클래스에 정의된 정적(static) 함수로, 함수 호출 시 sf::Keyboard::Key 열거형(enum) 타입을 인수로 전달합니다. sf::Keyboard::Key는 SFML에서 제공하는 모든 키보드 키를 나타내는 열거형입니다.
예를 들어, sf::Keyboard::Key::A는 키보드의 A 키를 나타내는 상수입니다. sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A) 함수를 호출하면 현재 A 키가 눌려있는지 여부를 불리언(boolean) 값으로 반환합니다. 즉, A 키가 눌려있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
따라서, sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A)는 A 키가 현재 눌려있는지를 확인하기 위해 사용되는 함수입니다. 이를 이용하여 키 입력에 따른 게임 로직을 구현할 수 있습니다. 예를 들어, A 키가 눌려있을 때 플레이어 캐릭터를 왼쪽으로 이동시키는 등의 게임 로직을 구현할 수 있습니다.

그리고 이동을 하기 위해서는

move(float x, float y)

함수를 사용합니다.

이제 전체적인 코드를 보겠습니다.

코드

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

int main()
{
 
    sf::RenderWindow window(sf::VideoMode(512,512), "SFML TUTORIAL", sf::Style::Close | sf::Style::Resize);
    sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
    player.setFillColor(sf::Color::Magenta);
    while (window.isOpen())
    {
        sf::Event evnt;
        while (window.pollEvent(evnt))
        {
            switch (evnt.type)
            {
            case sf::Event::Closed:
                window.close();
                break;
            }
      
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A)) //A가 눌렷을때
        {
            player.move(-0.1f, 0.0f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
        {
            player.move(0.1f, 0.0f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
        {
            player.move(0.0f, -0.1f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S))
        {
            player.move(0.0f, 0.1f);
        }

        window.draw(player); //백버퍼에 그림
        window.display(); //프론트 버퍼로 교체
        
    }
    return 0;
}   

이렇게 하면 정상적으로 player객체는 이동하지만 뱀게임마냥 이동합니다. 우리가 원하는건 이게 아니니

        window.clear(sf::Color::Yellow); //빈칸으로 비워두면 검정색 배경을 특정색으로 클리어 할 수도 있습니다.

이 코드를 사용하겠습니다.

그러면 정상적으로 player객체가 이동하는 것을 확인 하실 수 있습니다.

창에서의 좌표계

png

Leave a comment