C# 在SdlDotNet中使用Video.Screen代替表面对象
我看过的每个SDL或SdlDotNet教程都使用定义的曲面作为主屏幕。比如说C# 在SdlDotNet中使用Video.Screen代替表面对象,c#,sdl,sdl.net,C#,Sdl,Sdl.net,我看过的每个SDL或SdlDotNet教程都使用定义的曲面作为主屏幕。比如说 private static Surface videoscreen; videoscreen = SetVideoMode(800, 600, 16, false, false, false, true); videoscreen.Fill(Color.Black); videoscreen.Blit(sprite); videoscreen.Update(); 然而,当我试图用SdlDotNet构建一个游戏时,我
private static Surface videoscreen;
videoscreen = SetVideoMode(800, 600, 16, false, false, false, true);
videoscreen.Fill(Color.Black);
videoscreen.Blit(sprite);
videoscreen.Update();
然而,当我试图用SdlDotNet构建一个游戏时,我注意到我可以简单地使用Video.Screen来执行我通常在表面屏幕上执行的任何操作。例如:
Video.SetVideoMode(800, 600, 16, false, false, false, true);
Video.Screen.Fill(Color.Black);
Video.Screen.Blit(sprite);
Video.Screen.Update();
为什么每个人仍然使用定义的曲面?我假设在我的小游戏中没有遇到过性能或稳定性方面的问题,但我想知道,以防以后遇到麻烦。我知道这篇文章很旧,但是!如果你仍然感兴趣,以下是我对这个主题的看法:
Video.SetVideoMode()
方法返回的Surface
对象与Video.Screen
属性不相等,但它们都使用相同的句柄,即指向图形数据的指针。
我想说这主要是风格的问题,两者都是在主显示屏上工作的有效方法
导致Video.cs中出现以下内容:Video.SetVideoMode()
public static Surface SetVideoMode(int width, int height, int bitsPerPixel, bool resizable, bool openGL, bool fullScreen, bool hardwareSurface, bool frame) { /* ... */ return new Surface(Sdl.SDL_SetVideoMode(width, height, bitsPerPixel, (int)flags), true); }
。。。在Surface.cs中调用以下内部构造函数:/// <summary> /// Gets the surface for the window or screen, /// must be preceded by a call to SetVideoMode /// </summary> /// <returns>The main screen surface</returns> public static Surface Screen { get { return Surface.FromScreenPtr(Sdl.SDL_GetVideoSurface()); } }
internal Surface(IntPtr handle, bool isVideoMode) { this.Handle = handle; this.isVideoMode = isVideoMode; }
internal static Surface FromScreenPtr(IntPtr surfacePtr) { return new Surface(surfacePtr); }
internal Surface(IntPtr handle) { this.Handle = handle; }
- 或者,这是Video.cs中的
属性定义:Video.Screen
public static Surface SetVideoMode(int width, int height, int bitsPerPixel, bool resizable, bool openGL, bool fullScreen, bool hardwareSurface, bool frame) { /* ... */ return new Surface(Sdl.SDL_SetVideoMode(width, height, bitsPerPixel, (int)flags), true); }
。。。依次调用Surface.cs中的以下内部构造函数:/// <summary> /// Gets the surface for the window or screen, /// must be preceded by a call to SetVideoMode /// </summary> /// <returns>The main screen surface</returns> public static Surface Screen { get { return Surface.FromScreenPtr(Sdl.SDL_GetVideoSurface()); } }
internal Surface(IntPtr handle, bool isVideoMode) { this.Handle = handle; this.isVideoMode = isVideoMode; }
internal static Surface FromScreenPtr(IntPtr surfacePtr) { return new Surface(surfacePtr); }
internal Surface(IntPtr handle) { this.Handle = handle; }
Video.SetVideoMode()
和Video.Screen
返回的曲面
对象的句柄,您将看到它们是相等的,这是确保实际使用相同数据所需要知道的全部
希望这有帮助
资料来源: