我已经挣扎了很久。
我有一个名为Game1的主游戏类和一个名为myShowUp的DrawableGameComponent继承的ShowUp类
通常的方法是将组件myShowUp添加到Game1对象中,使其成为游戏的一部分(直接在Game1的 Initialize 方法中),如下所示:
class Game1 : Microsoft.Xna.Framework.Game
{
ShowUp myShowUp;
...
protected override Initialize ()
{
this.myShowUp = new ShowUp(this);
this.Components.Add(this.myShowUp);
}
...
}
此方法确实有效,并且myShowUp显示并成为游戏中的独立对象。
我想要的是稍后在游戏对象列表中实例化并添加对象(例如在窗口中单击之后)
这是我的尝试:
class Game1 : Microsoft.Xna.Framework.Game
{
MouseState myMouseState;
...
...
protected override void Update(GameTime gameTime)
{
myMouseState = Mouse.GetState();
if (myMouseState.LeftButton == ButtonState.Pressed)
{
this.myShowUp = new ShowUp(this); // Nothing
this.Components.Add(this.myShowUp); // Happens..
}
base.Update(gameTime);
}
...
}
到目前为止,我找到了一个方法,我只保留第一个语法(即,将实例化保留到 Initialize 方法中)并在ShowUp类中定义一个名为activate的布尔值。如果激活是真的,我会执行指令来显示它,否则什么也不会。在我的Game对象的 Update 方法中,如果按下左按钮将激活的变量更改为 true,我会调用myShowUp的activate ( ) 。
这种方法有效,但我不太满意,我希望它就像在代码中的任何位置实例化我的游戏对象中的对象以使其成为其中的一部分一样简单。有没有办法做到这一点?
就像是 :
class Game1 : Microsoft.Xna.Framework.Game
{
ShowUp myShowUp;
MouseState myMouseState;
...
...
protected override Initialize ()
{
this.Components.Add(this.myShowUp);
}
...
protected override void Update(GameTime gameTime)
{
myMouseState = Mouse.GetState();
if (myMouseState.LeftButton == ButtonState.Pressed)
{
this.myShowUp = new ShowUp(this);
}
base.Update(gameTime);
}
...
}
这会很好。