生成等距贴图

SFML Generate isometric tile

本文关键字:      更新时间:2023-10-16

我有一个精灵,一个正方形,用于正交投影。现在我想用一种非常基本的,简单的等距方式来描绘它。(我知道这可能不漂亮,但我只是想弄清楚)

给定一个正方形,我将它旋转45度。如果我理解正确的话,我还是应该把身高除以2。这对我在SFML中是不可能的。有一个比例函数,但如果我在y轴方向上缩放0.5倍,我的立方体就会被拉伸,而不是菱形。看起来好像SFML根据它自己的相对轴(之前是旋转的…)来转换精灵。

既然你不能访问精灵的高度,我想知道这是否可能?

我可以在SFML中将正方形精灵转换为菱形吗?

使用sf::RenderTexture是一个选项(见其他答案)。另一种选择是摆弄sf::View。将视图高度加倍,并调整坐标。它会像这样:

my_sprite.setRotation(45.f);
//adjust the position for new screen coordinates (once)
my_sprite.setPosition(my_sprite.getPosition().x, my_sprite.getPosition().y * 2);
//...
//when drawing:
sf::View v = my_render_window.getDefaultView();
v.setSize(v.getSize().x, v.getSize().y * 2);
v.setCenter(v.getSize() *.5f);
my_render_window.setView(v);
my_render_window.draw(my_sprite);
my_render_window.setView(my_render_window.getDefaultView());

像现在这样旋转精灵。将其渲染为sf::RenderTexture。使用成员函数getTexture,并从中创建一个新的精灵,或者重用旧的精灵。沿着y轴缩放精灵。绘制到渲染窗口

为了将RenderTexture设置为正确的大小并将原始精灵绘制在正确的位置,您可能需要一些数学运算。

original_sprite.setRotation(45);
sf::RenderTexture rt;
rt.create(FigureOutWidth(),FigureOutHeight());
original_sprite.setPosition(MoreMathHere());
rt.draw(original_sprite);
sf::Sprite new_sprite(rt.getTexture());
new_sprite.setScale(1.0,0.5);

这应该是不言而喻的,但是在初始化时只做一次,而不是每一帧。

相关文章:
  • 没有找到相关文章