我正在经历构建我的OOP技能的过程, 并编写了一个抽象的Screen类,其中包含一个以KeyboardState和MouseState为参数的update方法,以及一个以SpriteBatch为参数的draw方法。 该类还包括bool isEnabled,以及启用/禁用它的方法。
到目前为止它工作正常,扩展这些并且使用没有问题 直到它从一个屏幕移动到另一个屏幕。 我想知道屏幕被禁用的原因,以及下一步启用的屏幕。
目前我在Screen中使用了一个int变量,主类检查实现Screen的类是否被禁用并且具有“禁用原因”int。如果是这样,它会根据该int执行操作。 我猜一个int不是最好的选择而且Enum会更好吗?
但我真正的问题是,是否有更好的方法将数据传回主类? 我是否需要轮询每个禁用的类以查看是否存在“被禁用代码的原因”?
答案 0 :(得分:1)
我只会回答以下问题:
I guess that an int isn't the best choice and an Enum would be better?
即使你使用了enumation,你仍然会使用整数值,因为枚举有一个与之关联的整数值。
枚举的唯一好处是你会有原因的文字表示而不是(0,1,2,3 ..)。
答案 1 :(得分:1)
我猜int是不是最好的选择而且Enum会更好?
正确。制作一个枚举,例如:
enum DisabledReason { Something, SomethingElse; }
有没有更好的方法将数据传回主类?我是否需要轮询每个禁用的类以查看是否存在“被禁用代码的原因”?
为基本画面类添加活动 - 类似这样的内容(MSDN for EventHandler):
public event EventHandler<DisabledReason> Disabled;
使主类在创建屏幕时将事件处理程序附加到屏幕上。
使屏幕类在被禁用时调用Disabled
事件处理程序。
结果将是主要类被通知为什么屏幕被禁用,当被禁用时。您将屏幕的this
作为源参数传递给Disabled
事件 - 因此主类将知道事件来自哪个屏幕。
(注意:这是一个关于使用事件的速成课程 - 如果需要,可以进行更多关于如何使用事件的研究。)
答案 2 :(得分:1)
我建议从Microsoft App Hub网站上的Game State Management示例中“借用”。这都是关于屏幕管理的。 (请务必下载适用于Windows的示例 - 除非您制作手机应用程序。)
ScreenManager类是可重用的 维护堆栈的组件 一个或多个GameScreen实例。它 协调一个过渡 屏幕到另一个,并照顾 将用户输入路由到任何屏幕 在堆栈顶部。
答案 3 :(得分:1)
即使您最终“借用”代码来找出解决方案,您仍然可以从中获得一些好的OOP原则。 EventHandlers是“观察者”模式的典型例子。