2014-07-14 93 views
0

我的主循環:按引用傳遞一個TouchCollection

... 

// Variables declaration 
TouchCollection touch_; 

... 

private void InitializeAll() 
{ 
    ... 
    player = new Player(touch_); 
    ... 
} 

protected override void Update(GameTime gametime) 
{ 
    touch_ = TouchPanel.GetState(); 
    player_.Update(gametime); 
    ... 
} 

我想打電話給TouchPanel.GetState();只是一個時間每次更新,所以我沒有把它也在玩家的更新循環,並在所有其他對象的更新需要了解觸摸狀態的循環。所以我將touch_傳入玩家的構造函數,但我不工作:玩家沒有看到touch_變量的任何更新。

據我所知,這是一個與每次分配touch_的事實有關的問題。

我該如何解決這個問題?

+1

「touch_」的數據類型是什麼?如果它是一個結構體,我可以理解它爲什麼不起作用。 (是的,它[是一個結構](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.touchcollection.aspx)) – gunr2171

+0

@ gunr2171那麼我該如何解決問題? –

+0

先生Skeet發佈了一個很好的答案[通過c#結構參考?](http://stackoverflow.com/a/16614732/2596334),你可能會發現有幫助。 –

回答

1

據我所知,這是一個與touch_每次被分配的事實有關的問題。

確實,你快到了。覆蓋touch_的值是可以的,它只是假設您的player_將收到關閉的新值。

請記住,TouchPanel.GetState()返回TouchCollection。這是一個結構,這意味着如果你傳遞的是一個參數(就像在你的構造函數中那樣),它將是一個拷貝的對象,而不是參考它。

解決此問題的超簡單方法是:每次將新值傳入您的player_.Update()方法。

player_.Update(gametime, touch_); 

現在,當您的播放器更新時,它將有新的數據可供使用。如果你需要更復雜的數據,你將不得不圍繞你的數據。

如果你不需要,你可以從玩家的構造函數中移除參數。

+0

此外,這不取決於'TouchCollection'是結構還是類。 'player_'沒有引用變量'touch_'本身,即使它是一個類,所以重新分配給'touch_'不會影響'player_'的值。 – Ripple