通过引用传递一个TouchCollection

本文关键字:一个 TouchCollection 引用 | 更新日期: 2023-09-27 18:12:46

主循环:

...
// 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_每次都被分配的事实相关的问题。

我该如何解决这个问题?

通过引用传递一个TouchCollection

我理解这是一个与每次都分配touch_有关的问题。

没错,你就快成功了。覆盖touch_的值是可以的,这只是假设您的player_将接收到关闭的新值。

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

解决这个问题的超级简单的方法是:每次将新值传递给player_.Update()方法。
player_.Update(gametime, touch_);

现在当你的播放器更新,它将有新的数据工作。如果你需要更复杂的数据,你就必须把数据串联起来。

如果你不需要这个参数,你可以把它从播放器的构造函数中删除。

相关文章: