提问人:Star Dev 提问时间:7/15/2022 更新时间:9/22/2022 访问量:185
SFML 触摸位置不正确
SFML Touch position is not correct
问:
我正在使用名为 cxx droid 的应用程序在 android 上测试 sfml 的触摸。我的代码集是我按下的 RectangleShape。但是,即使我使相对于窗口的位置不是相对于它。在另一个地方触摸到位形状的pos!
我的代码 :
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
using namespace sf;
Font font;
int main() {
font.loadFromFile("font.otf");
RenderWindow window(VideoMode(500,700),"My window",Style::Titlebar | Style::Close);
window.setFramerateLimit(60);
RectangleShape shape(Vector2f(300,40));
while(window.isOpen()) {
window.setView(window.getDefaultView());
Event event;
while(window.pollEvent(event)) {
if(event.type == event.Closed) {
window.close();
}
}
if(Touch::isDown(0)) {
shape.setPosition(Touch::getPosition(0,window).x,Touch::getPosition(0,window).y);
}
window.clear(Color::Green);
window.draw(shape);
window.display();
}
return 0;
}
答:
0赞
Venom4992
7/15/2022
#1
如果形状的左上角位于您在屏幕上触摸的位置,则它是正确的,但您需要将形状的原点设置为形状的中心。
评论
0赞
Star Dev
7/15/2022
Venom4992 不,它不在左上角。形状的 y pos 是 500,但同一位置的触摸 pos 是 1500!因此,当我按下形状时,形状变为 y 1500
0赞
Venom4992
7/16/2022
这很奇怪。我没有在移动设备上使用 sfml,所以坐标在移动设备上的工作方式可能会有所不同
0赞
Jan666
9/22/2022
#2
几个星期后,我遇到了SAMD问题 您的 Rectangle 需要一个 FloatRect
sf::FloatRect shapeRect = shape.getGlobalBounds;
然后你必须在 while(window.isOpen());圈
sf::Vector2i pixelPos = sf::Touch::getPosition(0, window);
sf::Vector2f worldPos = window.mapPixelToCoords(pixelPos);
然后,将这两个东西都与 contains 一起使用
if(shapeRect.contains(worlPos))
{
// type your stuff in
}
现在 Touch 只能在 Shape 中工作,希望这对您有所帮助
评论