如何将"hook"转化为方法?

How to "hook" into methods?

我正在使用 XNA 开发游戏,我不想在 Draw 和 Update 方法内的主文件中放置一堆代码。有没有办法我可以只 运行 一个 "master" 方法在一个里面,例如:

 protected override void Draw(GameTime gameTime)
    {
        // Instead of having to do Tools.DrawModel() for every model 
        // I have to draw, can I do this?
        Tools.MasterDraw();
    }
 // Inside MasterDraw:
 public static void MasterDraw()
 {
        // A bunch of Tools.DrawModel() goes here, but instead of repeating
        // it every time for every model, how would I make a function 
        // to auto-add a line to draw itself inside this function????
 }

使用 XNA,您可以为每个对象定义一个 Draw 方法,如果它们派生自 DrawableGameComponent,将被自动调用。

基本上你的工具 class 应该是这样的:

public class Tool : DrawableGameComponent
{
    public Tool(Game game) : base(game)
    {
        game.Components.Add(this);        
    }

    public override void Draw(GameTime gameTime)
    {
        base.Draw(gameTime);

        // Put draw logic for your tool here
    }
}

您需要实现构造函数(它接收 Game)并将您的内容添加到 Game.Components 列表中。将对象添加到组件会触发对 Draw.

的自动调用

您也可以覆盖 Update 以避免将所有内容都放入 Game1 循环中。

您也应该好好看看 MSDN's Starter Kit: Platformer,因为您似乎不太熟悉 XNA。该模式在基础教程中实现。