我一直在苦苦思索很久。稍後在XNA的遊戲中創建一個DrawableGameComponent的實例
我有我的主要遊戲類稱爲的Game1和DrawableGameComponent -inherited ShowUp類稱爲myShowUp
通常的方法是myShowUp添加組件到遊戲1對象所以它是遊戲的一部分(直接在遊戲1初始化方法)如下:
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);
}
...
}
我發現一個方法到目前爲止,我只是保持第一種語法(即保持instanciation到Initialize方法)並定義一個布爾型到ShowUp類名爲激活。 如果激活是真的我執行說明顯示它,否則什麼也沒有。 在我遊戲對象我的更新方法,我稱之爲激活()如果的myShowUp我的左按鈕被按下的激活變量更改爲true。
這種方法可行,但我不是很滿意,我希望它會是那樣簡單,只是在我遊戲對象實例化對象的任何地方的代碼,使他們中的一部分。 有沒有辦法做到這一點?
喜歡的東西:
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);
}
...
}
這將是很好的。
看着文檔,沒有任何地方說你不能做你想做的事情 - 它並不是說你需要在'遊戲'的'Initialise'方法中添加一個組件。我注意到你正在分配'this.myShowUp' - 是否有任何理由將它分配給子類'Game'實例的成員?你可以發佈你的'Game1'類的'Draw'代碼和'ShowUp'類的代碼,因爲我有一個想法可能是什麼問題 – Charleh
@Charleh在* Game1 * * Draw *方法中,我沒有沒有任何東西,事實上添加組件this.myShowUp到遊戲(即this.Components.Add(this.myShowUp))使我們有可能重寫DrawableGameComponent中的Draw方法(因爲將一個新線程繪製到全局畫布中) – user544262772
'ShowUp'怎麼樣 - 它怎麼知道畫什麼?如果不重寫'Draw'方法,DrawableGameComponent是否會繪製佔位符?你是否重寫了'DrawableGameComponent.Draw'?我還沒有碰過XNA一段時間 - 你可以發佈你的ShowUp代碼嗎? – Charleh