C++ 为什么SFML位置是浮动的?

C++ 为什么SFML位置是浮动的?,c++,sfml,C++,Sfml,在SFML文档中,我看到精灵和形状的位置是浮动。为什么?它是否与sf::View链接,哪些边界也是float 文档链接: 您需要浮点才能正确设置精灵的动画。假设一个位置为x=1,然后根据增量时间将该位置增加到1.1。将精灵移动到x=2(下一个像素)需要10帧。使用整数x将四舍五入为1,并且您将完全不移动 除此之外,为了渲染内容,您必须计算变换矩阵(使用浮点),因此您必须早晚转换为浮点。这就是graphics API在内部的工作方式,SFML简单地包装了所有内容,因此您只需担心屏幕坐标(在这种

在SFML文档中,我看到精灵和形状的位置是<代码>浮动。为什么?它是否与
sf::View
链接,哪些边界也是
float

文档链接:


您需要浮点才能正确设置精灵的动画。假设一个位置为x=1,然后根据增量时间将该位置增加到1.1。将精灵移动到x=2(下一个像素)需要10帧。使用整数x将四舍五入为1,并且您将完全不移动


除此之外,为了渲染内容,您必须计算变换矩阵(使用浮点),因此您必须早晚转换为浮点。这就是graphics API在内部的工作方式,SFML简单地包装了所有内容,因此您只需担心屏幕坐标(在这种情况下是像素)。

SFML中的坐标是浮点数而不是整数,因为实际的转换——从世界坐标到屏幕上的像素——不必以1:1的方式进行

如何处理坐标及其映射完全取决于您

例如,您可能希望以整数部分标识平铺贴图中的平铺坐标的方式使用浮点坐标,而分数表示平铺边界之间的空间。在其他一些情况下,可能需要将坐标1:1映射到像素

最后,
sf::View
结合使用的
sf::RenderTarget
确定坐标的解释方式及其实际含义:

sf::RenderWindow window({512, 512}, "Test Window");

// This view is basically the default view for the window above.
// It maps coordinates 1:1 to pixels, which means a position (25,50) would map to the pixel at (25,50).
// This is the most common way.
sf::View pixelSpace({256, 256}, {512, 512});

// This view only shows things between (0, 0) and (1, 1), similar to how texture coordinates are usually handled.
// This can be useful, for example if you want to visualize the UV mapping of a model.
// You set this view and then just render based on the texture coordinate.
sf::View uvSpace({.5f, .5f}, {1, 1});

// This is an example for a tile based game, where the view allows you to
// make something 1.0 wide and high and it will automatically be the size of one tile.
// In this example I assume a 16:10 display ratio and I want 16x10 tiles to show.
sf::View tileSpace({8, 5}, {16, 10});

为什么不呢------RenderWindow的大小是uint,所以我现在有点困惑。@Quentin因为我们(至少我和OP)看不到它的优点,但可以发现一些缺点,比如较差的算术性能等等。请解释一下为什么它是浮点而不是整数?使用浮点可以进行亚像素渲染,因此线条不需要捕捉到像素网格。这对平滑动画非常有用。GPU对浮点数的使用进行了大量优化,这就是为什么OpenGL(构建SFML的基础)可以使用浮点数。dan,你的示例非常简单,可以解决我所有的问题。谢谢