0

我正在使用带有 C# 的 SFML.Net 2.4

我有一个大小为 1000x1000 的 RenderWindow 以这种方式插入到 System.Windows.Forms.Form 中:

public class ViewForm : Form
{
   SFML.Graphics.RenderWindow _renderWindow = null;
   public ViewForm()
   {
      _renderWindow = new RenderWindow(this.Handle);
   }
}

在我的绘图功能中,我只是使用精灵绘制图像:

    _renderWindow.DispatchEvents();
    _renderWindow.Clear(Color.Black);
    Image     img = new Image(path);
    Texture   tex = new Texture(img);
    Sprite    sprite = new Sprite(tex);
    _renderWindow.Draw(sprite);
    _renderWindow.Display();

我的问题是,当显示时,这个精灵在默认情况下会采用最大的尺寸(即此处为 1000),而基本图像只有 100 像素高(没有拉伸,但仍然会自动重新缩放)。

我不想自己反转自动缩放...如何保持图像的原始尺寸?


我做了一个测试:为了在 RenderWindow 中正确显示精灵(这次是独立运行,而不是嵌入到 winform 中),我必须按照以下规则应用比例:

sprite.Scale = new SFML.System.Vector2f(myScreenWidth / 1000f, myScreenHeight / 1000f);

我的屏幕尺寸是 1920x1080,因此我必须对精灵应用 (1.92 ; 1.08) 的比例... WTF?

4

1 回答 1

0

问题是我在将 ViewForm 的句柄传递给 SFML 后更改了它的大小:

new RenderWindow(this.Handle);

我当时在做:

this.Width = (int)finalWidth;
this.Height = (int)finalHeight;

现在,当我的表单改变大小时,我处理然后重新实例化 SFML 的 RenderWindow。它有效。

于 2019-07-02T12:29:46.493 回答