如何将"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。该模式在基础教程中实现。
我正在使用 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。该模式在基础教程中实现。