【问题标题】:Foreach statement does not contain public definition for getEnumeratorForeach 语句不包含 getEnumerator 的公共定义
【发布时间】:2015-04-27 00:56:16
【问题描述】:

我正在尝试实现两个桨之间的碰撞,但出现 GetEnumerator 错误。

这是我得到错误的地方:

foreach (Player item in paddle1)
{
    item.Update(gameTime);
    if (paddle2.CollisionSprite(item))
    {
        paddle2.Velocity = -paddle2.Velocity;
    }
}

还有我的来自 Player 的碰撞方法:

public virtual Circle CollisionCircle
{
    get
    {
        return new Circle((int)(Position.X - SpriteOrigin.X * Scale), (int)(Position.Y - SpriteOrigin.Y * Scale),
                (int)(TextureImage.Width * Scale), (int)(TextureImage.Height * Scale));
    }
}

public bool CollisionSprite(Player sprite)
{
    return CollisionCircle.Intersects(sprite.CollisionCircle);
}

【问题讨论】:

  • 如果 paddle1 不是 IEnumerable(列表、数组等),那么这将不起作用。您需要发布“paddle1”的类型。
  • 非常不清楚foreach (Player item in paddle1) 代码应该做什么...
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# collision monogame enumerator


【解决方案1】:

错误是因为 paddle1 是 Player 类型,而不是 IEnumerable。如果你只有两个玩家,你不应该循环并且可以像这样实现你的函数:

public void CollisionDetection(Player firstPlayer, Player secondPlayer)
{
    firstPlayer.Update(gameTime);
    secondPlayer.Update(gameTime);

    if (firstPlayer.CollisionSprite(secondPlayer))
    {
        firstPlayer.Velocity = -firstPlayer.Velocity;
        secondPlayer.Velocity = -secondPlayer.Velocity;
    }
}

用法如下:

CollisionDetection(paddle1, paddle2);

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 2014-05-08
    • 2014-05-20
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-07-10
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多