如何“挂钩”方法?

时间:2015-01-18 22:51:01

标签: c# xna

我正在使用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????
 }

1 个答案:

答案 0 :(得分:0)

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

所以基本上你的Tool类看起来应该是这样的:

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。该模式在基础教程中实现。