【问题标题】:SFML Generate isometric tileSFML 生成等距平铺
【发布时间】:2012-12-20 05:40:56
【问题描述】:

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

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

由于您无法访问精灵的高度,我想知道这是否可能?

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

【问题讨论】:

    标签: c++ graphics 2d sfml


    【解决方案1】:

    使用 sf::RenderTexture 是一种选择(参见other answer)。另一种选择是摆弄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());
    

    【讨论】:

      【解决方案2】:

      像现在一样旋转你的精灵。将其渲染到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);
      

      不用说,但在初始化时执行一次,而不是每一帧。

      【讨论】:

      • 另一种可能性是在绘制之前更改sf::View的大小(将高度加倍,并相应调整精灵的位置)。
      • @AndreiTita:嘿,是的。那行得通,而且要简单得多。我不知道你能做到这一点。怎么还没回答?
      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2014-09-05
      • 2014-02-25
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多