问题描述
我在国际象棋游戏中使用C ++图形中的SFML libraby。
在游戏中移动棋子时会发生鼠标左键事件。因此,这就是我最初的跟踪方式。
sf::Event e;
if (e.type == sf::Event::MouseButtonReleased){
if(e.key.code == sf::Mouse::Left){
//Do something
}
}
这将提供以下编译结果警告;
|1175|warning: comparison between 'enum sf::Keyboard::Key' and 'enum sf::Mouse::Button' [-Wenum-compare]|
代码仍将正确执行。
- 为什么会出现此问题?
- 如何避免此警告?
解决方法
key
中的成员sf::Event
(即sf::Event::key
)是枚举sf::Keyboard::Key
的枚举,而枚举sf::Mouse::Left
属于枚举{ {1}}。
原则上,在处理事件sf::Mouse::Button
或key
时,您只应该对sf::Event
中的联合sf::Event::KeyPressed
成员感兴趣。
在处理事件sf::Event::KeyReleased
时,正在将联合中的错误数据成员(sf::Event::MouseButtonReleased
)与枚举器sf::Event::key
进行比较。尝试与sf::Mouse::Left
进行比较:
e.mouseButton.button