通过引用传递TouchCollection

时间:2014-07-14 16:39:39

标签: c# xna

我的主循环:

...

// 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 个答案:

答案 0 :(得分:1)

  

我知道这是一个与每次都分配touch_这一事实有关的问题。

是的,你几乎就在那里。覆盖touch_的值是可以的,只是假设您的player_将收到关闭的新值。

请记住,TouchPanel.GetState()会返回TouchCollection。这是一个结构,这意味着如果你传递的是一个参数(就像你的构造函数一样),它将是对象的副本,而不是引用

解决此问题的超简单方法:每次将新值传递到player_.Update()方法。

player_.Update(gametime, touch_);

现在,当您的播放器更新时,它将有新的数据可供使用。如果您需要更复杂的数据,则必须对数据进行处理。

如果您不需要参数,也可以从玩家的构造函数中删除参数。