SFML 触摸位置不正确

SFML Touch position is not correct

提问人:Star Dev 提问时间:7/15/2022 更新时间:9/22/2022 访问量:185

问:

我正在使用名为 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;
}
C++ 事件 触摸 SFML 矩形

评论


答:

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 中工作,希望这对您有所帮助