翻蚳è
ããïŒãã®èšäºã¯ãå
¬åŒã®SFMLã©ã€ãã©ãªã¬ã€ãã®ç¿»èš³ãµã€ã¯ã«ã®10çªç®ã§ãã éå»ã®èšäºã¯ãã¡ãã«ãããŸãã ãã®äžé£ã®èšäºã®ç®çã¯ãå
ã®èšèªãç¥ããªã人ã«ãã®ã©ã€ãã©ãªã«æ
£ããæ©äŒãæäŸããããšã§ãã SFMLã¯ãã·ã³ãã«ã§ã¯ãã¹ãã©ãããã©ãŒã ã®ãã«ãã¡ãã£ã¢ã©ã€ãã©ãªã§ãã SFMLã¯ãã²ãŒã ããã®ä»ã®ãã«ãã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ã·ã³ãã«ãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã å
ã®èšäºã¯ãã¡ãã«ãããŸã ã å§ããŸãããããšã³ããªãŒ
ãã®èšäºã§ã¯ãã€ãã³ãã®è©³çŽ°ãªãªã¹ããæäŸãããããã®ã€ãã³ããåŠçããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã¿ã€ãsf ::ã€ãã³ã
ã€ãã³ãã詳现ã«åæããåã«ã
sf ::ã€ãã³ãã¿ã€ããšã¯äœãããããæ£ãã䜿çšããæ¹æ³ãç解ããããšãéèŠã§ãã
sf ::ã€ãã³ãã¯ã
ã€ãã³ãã®ã¿ã€ããä¿åããé¢é£ä»ããšãè£å©é¢æ°ããã³ã¡ã³ããŒã§æ§æãããŸãã ãŠããªã³ã®äœ¿çšå¯èœãªã¡ã³ããŒã¯ãã¯ã©ã¹ã®1ã€ä»¥äžã®ã¡ã³ããŒã«å¯Ÿå¿ããŸããããšãã°ã
event.key
ã¯
KeyPressed
ã€ãã³ãã«å¯Ÿå¿ããŸãã ä»ã®ã¡ã³ããŒãåŠçããããšãããšãæªå®çŸ©ã®åäœãçºçããŸãã çºçããªãã£ãã€ãã³ããåŠçããããšããªãã§ãã ããã
sf :: Eventã€ã³ã¹ã¿ã³ã¹ã¯ã
sf :: Windowã¯ã©ã¹ã®
pollEvent
ïŒãŸãã¯
waitEvent
ïŒé¢æ°ã§åæåã§ããŸãã ããã2ã€ã®é¢æ°ã®ã¿ã
sf :: Eventã®ã€ã³ã¹ã¿ã³ã¹ãåæåã§ããŸãã
æ確ã«ããããã«ãå
žåçãªã€ãã³ãã«ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
sf::Event event; // , ... while (window.pollEvent(event)) { // ... switch (event.type) { // case sf::Event::Closed: window.close(); break; // case sf::Event::KeyPressed: ... break; // default: break; } }
äžèšã®æ®µèœãèªã¿çŽããç解ããŠãã ããã
sf :: Eventã¯ã©ã¹ã¯ãåå¿è
ããã°ã©ãã«ãšã£ãŠå€ãã®åé¡ãåŒãèµ·ãããŸãã
ããŠãSFMLã§ã€ãã³ããã©ã®ããã«è¡šçŸãããããããã£ãã®ã§ã次ã¯åã€ãã³ãã®æå³ãç解ããŸãã
ã¯ããŒãºãã€ãã³ã
sf::Event::Closed
ããŠãŒã¶ãŒããŠã£ã³ããŠãããŒãžã£ãŒãæäŸããã¡ãœããïŒéãããã¿ã³ãããŒããŒããã¯ããªã©ïŒã®ããããã䜿çšããŠãŠã£ã³ããŠãéããããšãã«çºçããŸãã ãã®ã€ãã³ãã¯ããŠãŒã¶ãŒããŠã£ã³ããŠãéããããšããæ
å ±ãæäŸããŸãã ãŸã éããŠããŸããã
éåžžããã®ã€ãã³ãã«å¿çããŠãã³ãŒãã¯
window.close()
ãåŒã³åºããŠãŠã£ã³ããŠãéããŸãã ãã ããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®çŸåšã®ç¶æ
ãä¿åãããããŠãŒã¶ãŒã«äœãããå¿
èŠãããããå°ããããããªã©ãä»ã®ããšãè¡ãããšãã§ããŸãã ãã®ã€ãã³ãã«å¿çããŠäœãããªãå ŽåããŠã£ã³ããŠã¯éãããŸãŸã«ãªããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯ååšããŸããã
if (event.type == sf::Event::Closed) window.close();
ãµã€ãºå€æŽãããã€ãã³ã
sf::Event::Resized
ã¯ããŠã£ã³ããŠã®ãµã€ãºãå€æŽããããšçºçããŸãã
window.setSize
ãåŒã³åºããåŸããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã®çµæãšããŠããŸãã¯ããã°ã©ã ã«ãã£ãŠã
ãã®ã€ãã³ãã䜿çšããŠããã£ã¹ãã¬ã€èšå®ã調æŽã§ããŸã
sfml-graphics
çŽæ¥äœ¿çšããå Žåã¯ãã¥ãŒããŒãã
sfml-graphics
ã䜿çšããå Žåã¯çŸåšã®èŠç¹ã
ãã®ã€ãã³ãã«é¢é£ä»ããããŠããã¯ã©ã¹ã¡ã³ããŒã¯event.sizeãšåŒã°ããæ°ãããŠã£ã³ããŠãµã€ãºãå«ãŸããŠããŸãã
if (event.type == sf::Event::Resized) { std::cout << "new width: " << event.size.width << std::endl; std::cout << "new height: " << event.size.height << std::endl; }
LostFocusããã³GainedFocusã€ãã³ã
ã€ãã³ã
sf::Event::LostFocus
ããã³
sf::Event::GainedFocus
ã¯ããŠã£ã³ããŠããã©ãŒã«ã¹ã倱ã£ã/ç²åŸãããšãã«
sf::Event::GainedFocus
ãŸãã ããã¯ããŠãŒã¶ãŒãçŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠãå€æŽãããšãã«çºçããŸãã ãŠã£ã³ããŠããã©ãŒã«ã¹ã倱ããšãããŒããŒãã€ãã³ããåãåããŸããã
ãã®ã€ãã³ãã¯ãããšãã°ããŠã£ã³ããŠãã¢ã¯ãã£ãã§ãªããšãã«ã²ãŒã ãäžæåæ¢ããããã«äœ¿çšã§ããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯ååšããŸããã
if (event.type == sf::Event::LostFocus) myGame.pause(); if (event.type == sf::Event::GainedFocus) myGame.resume();
TextEnteredã€ãã³ã
æåå
¥åãçºçãããšã
sf::Event::TextEntered
çºçããŸãã ããã¯
KeyPressed
ã€ãã³ãã§ã¯ãããŸãã
TextEntered
ã¯ããŠãŒã¶ãŒãåºåå¯èœãªæåãå
¥åãããšçºçããŸãã ããšãã°ããã©ã³ã¹èªã®ããŒããŒãã§ã^ããšãeããæŒããšã2ã€ã®
KeyPressed
ã€ãã³ããšãæåãêããå«ã1ã€ã®
TextEntered
ã®ã¿ãçºçããŸãã ããã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãæäŸãããã¹ãŠã®å
¥åã¡ãœããã§æ©èœããŸãã
ãã®ã€ãã³ãã¯éåžžãããã¹ããã£ãŒã«ããžã®ãŠãŒã¶ãŒå
¥åããã©ããããããã«äœ¿çšãããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããŠããã¯ã©ã¹ã¡ã³ããŒã¯
event.text
ãšåŒã°ããå
¥åãããæåã®Unicodeæåçªå·ãå«ãŸããŠããŸãã ãã®å€ã
sf :: Stringã«å
¥ãããããã®æåãASCIIæåã®ç¯å²ïŒ0-127ïŒã§ããããšã確èªããŠãã
char
ã«ãã£ã¹ãã§ããŸãã
if (event.type == sf::Event::TextEntered) { if (event.text.unicode < 128) std::cout << "ASCII character typed: " << static_cast<char>(event.text.unicode) << std::endl; }
å€ãã®ããã°ã©ããŒã¯ã
KeyPressed
ã€ãã³ãã䜿çšããŠãŠãŒã¶ãŒå
¥åãåŠçããã¯ã¬ã€ãžãŒãªã¢ã«ãŽãªãºã ã䜿çšããŠãå¯èœãªãã¹ãŠã®ããŒã®çµã¿åããã解éããããšãããŠãŒã¶ãŒå
¥åãåŠçããŸãã ãããããªãã§ãã ããïŒ
KeyPressedããã³KeyReleasedã€ãã³ã
ã€ãã³ã
sf::Event::KeyPressed
ããã³
sf::Event::KeyReleased
ãããŒããŒãã®ããŒãæŒããã/
sf::Event::KeyReleased
ããšãã«ããªã¬ãŒãããŸãã
ããŒãæŒãããŠããå Žåããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãã£ãŠæå®ãããç¹å®ã®ééã§
KeyPressed
ã€ãã³ããçæãããŸãïŒã€ãŸãããšãã£ã¿ãŒã«ããã¹ããå
¥åãããšãã«é©çšãããã®ãšåãé
延ïŒã
KeyPressed
ã€ãã³ãã®ç¹°ãè¿ãããã£ã³ã»ã«ããã«ã¯ã
window.setKeyRepeatEnabled(false)
åŒã³åºããŸãã æããã«ã
KeyReleased
ã€ãã³ã
KeyReleased
ç¹°ãè¿ãããŸããã
ãããã®ã€ãã³ãã¯ãããšãã°ããã£ã©ã¯ã¿ãŒããžã£ã³ããããããã«ãããŒãæŒããããé¢ããããšãã«ã¢ã¯ã·ã§ã³ã1åã ãããªã¬ãŒããå Žåã«äœ¿çšã§ããŸãã
æã
ã人ã
ã¯ã¹ã ãŒãºãªåããå®è£
ããããã«
KeyPressed
ã€ãã³ãã䜿çšããããšããŸãã ãã®ã€ãã³ãã¯ç¹å®ã®ééã§çæããããããããã¯æåŸ
ãããå¹æã«ã¯ã€ãªãããŸããã ã€ãã³ãã§ã¹ã ãŒãºãªã¢ãŒã·ã§ã³ãå®è£
ããã«ã¯ã
KeyPressed
ã«ãã£ãŠèšå®ãã
KeyReleased
ãããããŒã«å€ã䜿çšããå¿
èŠããããŸãã ãã®è«çå€ã確ç«ãããŠããéã«ç§»åãå®è¡ããå¿
èŠããããŸãã
sf :: Keyboardã䜿çšããŠããŒããŒãããæ°Žã䜿çšããŠãã¹ã ãŒãºãªåããå®è£
ããä»ã®ïŒããç°¡åãªïŒæ¹æ³ïŒ
ããã«é¢ããèšäºãåç
§ïŒã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ãã¯
event.key
ãšåŒã°ããæŒããã/æŒãããæåã®ã³ãŒããšã修食ããŒã®çŸåšã®ç¶æ
ïŒaltãcontrolãshiftãsystemïŒãå«ãŸããŸãã
if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::Escape) { std::cout << "the escape key was pressed" << std::endl; std::cout << "control:" << event.key.control << std::endl; std::cout << "alt:" << event.key.alt << std::endl; std::cout << "shift:" << event.key.shift << std::endl; std::cout << "system:" << event.key.system << std::endl; } }
äžéšã®ããŒã«ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã åºæã®å€ãããããããã®ããŒã®åŠçã«ããæªå®çŸ©ã®åäœãçºçããããšã«æ³šæããŠãã ããã ããšãã°ãWindowsã§ãã©ãŒã«ã¹ãå€æŽããF10ããŒããŸãã¯Visual Studioã䜿çšããŠãããšãã«ãããã¬ãŒãèµ·åããF12ããŒã ãã®åé¡ã¯ãSFMLã®å°æ¥ã®ããŒãžã§ã³ã§è§£æ±ºãããäºå®ã§ãã
MouseWheelMovedã€ãã³ã
sf::Event::MouseWheelMoved
ã¯å»æ¢ãããSFML 2.3ã§å»æ¢ãããŸããã
MouseWheelScrolled
䜿çšã
MouseWheelScrolled
ã
MouseWheelScrolledã€ãã³ã
sf::Event::MouseWheelScrolled
ãããŠã¹ãã€ãŒã«ãäžäžå·Šå³ã«ç§»åã
sf::Event::MouseWheelScrolled
ãšãã«çºçããŸãïŒããŠã¹ã§ãµããŒããããŠããå ŽåïŒã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯
event.mouseWheelScroll
ãšåŒã°ãããã€ãŒã«ãã·ãããããã£ãã¯æ°ããã€ãŒã«ã®åãã®æ¹åãããã³ããŠã¹ã«ãŒãœã«ã®çŸåšã®äœçœ®ãå«ãŸããŸãã
if (event.type == sf::Event::MouseWheelScrolled) { if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel) std::cout << "wheel type: vertical" << std::endl; else if (event.mouseWheelScroll.wheel == sf::Mouse::HorizontalWheel) std::cout << "wheel type: horizontal" << std::endl; else std::cout << "wheel type: unknown" << std::endl; std::cout << "wheel movement: " << event.mouseWheelScroll.delta << std::endl; std::cout << "mouse x: " << event.mouseWheelScroll.x << std::endl; std::cout << "mouse y: " << event.mouseWheelScroll.y << std::endl; }
MouseButtonPressedããã³MouseButtonReleasedã€ãã³ã
sf::Event::MouseButtonPressed
ããã³
sf::Event::MouseButtonReleased
ã¯ãããŠã¹ãã¿ã³ãæŒããã/
sf::Event::MouseButtonReleased
ãšãã«çºçããŸãã
SFMLã¯ã5ã€ã®ããŠã¹ãã¿ã³ããµããŒãããŠããŸãïŒå·Šãå³ãäžå€®ïŒããŠã¹ãã€ãŒã«ïŒãè¿œå ïŒ1ããã³è¿œå ïŒ2ïŒåŽé¢ã®ãã¿ã³ïŒã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã®ã¡ã³ããŒã¯
event.mouseButton
ãšåŒã°ããæŒããã/æŒããããã¿ã³ã®ã³ãŒããšããŠã¹ã«ãŒãœã«ã®äœçœ®ãå«ã¿ãŸãã
if (event.type == sf::Event::MouseButtonPressed) { if (event.mouseButton.button == sf::Mouse::Right) { std::cout << "the right button was pressed" << std::endl; std::cout << "mouse x: " << event.mouseButton.x << std::endl; std::cout << "mouse y: " << event.mouseButton.y << std::endl; } }
MouseMovedã€ãã³ã
ããŠã¹ã«ãŒãœã«ããŠã£ã³ããŠå
ã§ç§»åãããšã
sf::Event::MouseMoved
çºçããŸãã
ãã®ã€ãã³ãã¯ããŠã£ã³ããŠã®çŠç¹ãåã£ãŠããªããŠãçºçããŸãã ãã ããããªã¬ãŒã¯ãããŠã¹ã«ãŒãœã«ããŠã£ã³ããŠã®å
åŽã®é åå
ã§ã®ã¿ç§»åããå Žåã«ã®ã¿çºçããŸãïŒã¿ã€ãã«ãšå¢çç·ã¯ãŠã£ã³ããŠã®å
åŽã®ç«¯ã«ã¯å
¥ããŸããïŒã
ãã®ã€ãã³ãã«é¢é£ä»ããããŠããã¯ã©ã¹ã¡ã³ãã¯
event.mouseMove
ãšåŒã°ãããŠã£ã³ããŠã«å¯ŸããããŠã¹ã«ãŒãœã«ã®äœçœ®ãå«ãŸããŠããŸãã
if (event.type == sf::Event::MouseMoved) { std::cout << "new mouse x: " << event.mouseMove.x << std::endl; std::cout << "new mouse y: " << event.mouseMove.y << std::endl; }
MouseEnteredããã³MouseLeftã€ãã³ã
ã€ãã³ã
sf::Event::MouseEntered
ããã³
sf::Event::MouseLeft
ãããŠã¹ã«ãŒãœã«ããŠã£ã³ããŠã«åºå
¥ããããšãã«ããªã¬ãŒãããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯ååšããŸããã
if (event.type == sf::Event::MouseEntered) std::cout << "the mouse cursor has entered the window" << std::endl; if (event.type == sf::Event::MouseLeft) std::cout << "the mouse cursor has left the window" << std::endl;
JoystickButtonPressedããã³JoystickButtonReleasedã€ãã³ã
ã€ãã³ã
sf::Event::JoystickButtonPressed
ããã³
sf::Event::JoystickButtonReleased
ã¯ãã²ãŒã ããããã¿ã³ãæŒããã/é¢ããããšãã«çºçããŸãã
SFMLã¯ã8ã€ã®ãžã§ã€ã¹ãã£ãã¯ãš32ã®ãã¿ã³ããµããŒãããŠããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯
event.joystickButton
ãšåŒã°ãããžã§ã€ã¹ãã£ãã¯èå¥åãšæŒããã/æŒããããã¿ã³ã®ã€ã³ããã¯ã¹ãå«ãŸããŸãã
if (event.type == sf::Event::JoystickButtonPressed) { std::cout << "joystick button pressed!" << std::endl; std::cout << "joystick id: " << event.joystickButton.joystickId << std::endl; std::cout << "button: " << event.joystickButton.button << std::endl; }
JoystickMovedã€ãã³ã
sf::Event::JoystickMoved
ã¯ãã²ãŒã ãããã®ã¹ãã£ãã¯ãåããšçºçããŸãã
ãžã§ã€ã¹ãã£ãã¯ã¹ãã£ãã¯ã¯éåžžéåžžã«ææã§ãããããSFMLã¯æ€åºãããå€ã䜿çšããŠ
JoystickMoved
ç¶ç¶çãªããªã¬ãŒãåé¿ããŸãã ãã®ãããå€ã¯ã
Window::setJoystickThreshold
åŒã³åºãããšã§å€æŽã§ããŸãã
SFMLã¯ãXãYãZãRãUãVãPOV XãPOV Yã®8æ¬ã®ãžã§ã€ã¹ãã£ãã¯ããµããŒãããŠããŸããã²ãŒã ããããšã®ããåããã©ã®ããã«çºçãããã¯ããã®ã²ãŒã ãããã®ãã©ã€ããŒã«ãã£ãŠç°ãªããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¯ã©ã¹ã¡ã³ããŒã¯
event.joystickMove
ãšåŒã°ãããžã§ã€ã¹ãã£ãã¯èå¥åãã¹ãã£ãã¯ã®ååãããã³çŸåšã®äœçœ®ïŒ[
event.joystickMove
]ã®ç¯å²ïŒãå«ãŸããŸãã
if (event.type == sf::Event::JoystickMoved) { if (event.joystickMove.axis == sf::Joystick::X) { std::cout << "X axis moved!" << std::endl; std::cout << "joystick id: " << event.joystickMove.joystickId << std::endl; std::cout << "new position: " << event.joystickMove.position << std::endl; } }
JoystickConnectedããã³JoystickDisconnectedã€ãã³ã
ã€ãã³ã
sf::Event::JoystickConnected
ããã³
sf::Event::JoystickDisconnected
ããžã§ã€ã¹ãã£ãã¯ãåå /åæ
sf::Event::JoystickDisconnected
ããªã¬ãŒãããŸãã
ãã®ã€ãã³ãã«é¢é£ä»ããããã¡ã³ããŒã¯ã©ã¹ã¯
event.joystickConnect
ãšåŒã°ããæ¥ç¶/åæããããžã§ã€ã¹ãã£ãã¯ã®èå¥åãå«ã¿ãŸãã
if (event.type == sf::Event::JoystickConnected) std::cout << "joystick connected: " << event.joystickConnect.joystickId << std::endl; if (event.type == sf::Event::JoystickDisconnected) std::cout << "joystick disconnected: " << event.joystickConnect.joystickId << std::endl;
次ã®èšäºïŒããŒããŒããããŠã¹ããžã§ã€ã¹ãã£ãã¯ã®æäœã