我正在使用带有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);
}
}
在我的绘图功能中,我只需使用sprite绘制图像:
_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?
问题是,在将ViewForm的句柄传递给SFML后,我更改了ViewForm的大小:
new RenderWindow(this.Handle);
我当时在做:
this.Width = (int)finalWidth;
this.Height = (int)finalHeight;
现在,当我的Form更改大小时,我将处理并重新实例化SFML的RenderWindow。它是有效的。