Keyboard, mouse and joystick

系列文章

SFML-windows 篇
SFML-Events explained 篇
SFML-Keyboard, mouse and joystick 篇
SFML-Using OpenGL in a SFML window 篇
SFML-Drawing 2D stuff 篇
SFML-Shapes 篇
SFML-Sprites and textures 篇

Introduction

本教程介绍如何访问全局输入设备:键盘、鼠标和操纵杆。这不能与事件混淆。实时输入允许您随时查询键盘、鼠标和操纵杆的全局状态(“当前是否按下此按钮?”,“鼠标当前在哪里?”)当事件发生时通知您(“此按钮已按下”,“鼠标已移动”)。

Keyboard

提供对键盘状态访问的类是sf::keyboard。它只包含一个功能isKeyPressed,用于检查按键(按下或释放)的当前状态。它是一个静态函数,所以您不需要实例化sf::Keyboard来使用它。

此函数直接读取键盘状态,忽略窗口的焦点状态。这意味着即使您的窗口处于非活动状态,isKeyPressed也可能返回true。

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
    // left key is pressed: move our character
    character.move(1.f, 0.f);
}

键代码在sf::Keyboard::Key枚举中定义。

根据您的操作系统和键盘布局,某些键代码可能丢失或解释不正确。这将在SFML的未来版本中得到改进。


Mouse

提供对鼠标状态的访问的类是sf::Mouse。与它的朋友sf::Keyboard一样, sf::Mouse只包含静态函数,不打算被实例化(SFML目前只处理一个鼠标)。

您可以检查按钮是否按下:

if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
    // left mouse button is pressed: shoot
    gun.fire();
}

鼠标按钮代码在sf::Mouse::Button enum中定义。SFML最多支持5个按钮:左、右、中(轮子)和两个附加按钮。

您还可以获取并设置鼠标相对于桌面或窗口的当前位置:

sf::Vector2i globalPosition = sf::Mouse::getPosition();

// get the local mouse position (relative to a window)
sf::Vector2i localPosition = sf::Mouse::getPosition(window); // window is a sf::Window
// set the mouse position globally (relative to the desktop)
sf::Mouse::setPosition(sf::Vector2i(10, 50));

// set the mouse position locally (relative to a window)
sf::Mouse::setPosition(sf::Vector2i(10, 50), window); // window is a sf::Window

没有读取鼠标滚轮当前状态的功能。由于车轮只能相对移动,因此没有可查询的绝对状态。通过看一个键,你可以判断它是被按下还是被释放。通过观察鼠标光标,您可以知道它在屏幕上的位置。然而,看着鼠标滚轮并不能告诉你它在哪个“滴答”上。您只能在它移动时收到通知(MouseWheelScrolled事件)。


Joystick

有关操作杆这里省略,需要请自查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值