在SFML文档中,我看到精灵和形状的位置是... float
。为什么?它是否与sf::View
链接,float
的范围也一样?
文档链接:
答案 0 :(得分:3)
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});
答案 1 :(得分:2)
您需要浮点才能正确地设置精灵的动画。想象一下x = 1的头寸,您将基于增量时间将头寸增加到1.1。将精灵移动到x = 2(下一个像素)需要10帧。使用整数x会四舍五入为1,并且您根本不会移动。
此外,为了渲染内容,您必须计算转换矩阵(使用浮点数),因此无论如何迟早都必须转换为浮点数。这是图形API在内部工作的方式,SFML只是将所有内容包装起来,因此您只需要担心屏幕坐标(在这种情况下为像素)。