C# 在XNA 4.0中管理自定义屏幕
我正在经历建立面向对象编程技能的过程, 并编写了一个抽象的Screen类,其中包含一个更新方法(以KeyboardState和MouseState为参数)和一个draw方法(以SpriteBatch为参数)。 该类还包括一个bool isEnabled,以及启用/禁用它的方法 到目前为止,它工作得很好,扩展了这些功能,使用起来没有问题 直到从一个屏幕移动到另一个屏幕。 我想知道为什么屏幕被禁用,以及下一步要启用哪个 目前,我在屏幕中使用了一个int变量,主类检查实现屏幕的类是否被禁用,是否有一个“disabled reason”int。如果是,它会基于该int执行一个操作。 我猜int不是最好的选择,而Enum会更好 但我真正的问题是,有没有更好的方法将数据传递回主类?C# 在XNA 4.0中管理自定义屏幕,c#,oop,xna,C#,Oop,Xna,我正在经历建立面向对象编程技能的过程, 并编写了一个抽象的Screen类,其中包含一个更新方法(以KeyboardState和MouseState为参数)和一个draw方法(以SpriteBatch为参数)。 该类还包括一个bool isEnabled,以及启用/禁用它的方法 到目前为止,它工作得很好,扩展了这些功能,使用起来没有问题 直到从一个屏幕移动到另一个屏幕。 我想知道为什么屏幕被禁用,以及下一步要启用哪个 目前,我在屏幕中使用了一个int变量,主类检查实现屏幕的类是否被禁用,是否有一个
我是否需要对每个残疾班级进行投票,以确定是否有“被禁用的原因代码”我只回答以下问题: 即使使用枚举,也将使用整数值,因为枚举具有与其关联的整数值 枚举的唯一好处是,您可以使用原因的文本表示,而不是(0、1、2、3..) 我猜int不是最好的选择,而Enum会更好 对。创建枚举,例如:
enum DisabledReason { Something, SomethingElse; }
是否有更好的方法将数据中继回主类?我是否需要对每个残疾类进行民意调查,看看是否有“被禁用的原因代码”
给基本屏幕类一个事件
公共事件事件处理程序已禁用;
使主类在创建屏幕时将事件处理程序附加到屏幕
当screen类被禁用时,让它调用Disabled
事件处理程序
结果是,当屏幕被禁用时,会通知主类为什么屏幕被禁用。您将屏幕的this
传递给Disabled
事件作为源参数-这样主类将知道事件来自哪个屏幕
(注意:这是一个关于使用事件的速成课程-如果需要,请对如何使用事件进行更多的研究。)我建议“借用”Microsoft App Hub网站上的示例。这都是关于屏幕管理的。(请务必下载Windows示例-除非您正在制作手机应用程序)
ScreenManager类是一个可重用的类
维护一个堆栈的组件
一个或多个GameScreen实例。信息技术
协调从一个到另一个的过渡
屏幕切换到另一个屏幕,并处理
将用户输入路由到任意屏幕
在堆栈的顶部
即使您最终“借用”了代码来找出解决方案,您仍然可以从中获得一些好的OOP原则。EventHandler是“观察者”模式的经典示例。谢谢你的回答:)是的,我的想法是,在代码中赋予纯整数值意义是一种不好的做法。更不用说我后来扩展它时的困惑了。我根本没有遇到过编写事件。这显然比持续的轮询更有效。你已经给了我下一个要学习的领域:P谢谢你的回答:我考虑过寻找类似的东西,但决定尝试以自己的方式作为学习练习,以更加熟悉/熟悉OOP编程。不过谢谢你的链接,在我尽我所能之后,我会看看它是如何工作的:)
enum DisabledReason { Something, SomethingElse; }
public event EventHandler<DisabledReason> Disabled;