C# XNA精灵只在玩家交叉时消失

C# XNA精灵只在玩家交叉时消失,c#,xna,sprite,collision,C#,Xna,Sprite,Collision,我正在做一个游戏,玩家将四处收集猕猴桃。当玩家触摸到一只猕猴桃时,我希望猕猴桃精灵永久消失。到目前为止,我只能让猕猴桃精灵在玩家触摸它们时消失,当玩家离开猕猴桃矩形时,猕猴桃精灵重新出现 以下是我在Kiwi类中创建的intersect函数: public void Intersect(Rectangle playerRect, SpriteBatch spriteBatch) { foreach (Rectangle kiwiRect in kiwiRectangle)

我正在做一个游戏,玩家将四处收集猕猴桃。当玩家触摸到一只猕猴桃时,我希望猕猴桃精灵永久消失。到目前为止,我只能让猕猴桃精灵在玩家触摸它们时消失,当玩家离开猕猴桃矩形时,猕猴桃精灵重新出现

以下是我在Kiwi类中创建的intersect函数:

public void Intersect(Rectangle playerRect, SpriteBatch spriteBatch)
    {
        foreach (Rectangle kiwiRect in kiwiRectangle)
        {
            if (!kiwiRect.Intersects(playerRect))
            {
                isCollected = false;
            }
            else
                isCollected = true;

            if (!isCollected)
            {
                spriteBatch.Draw(kiwiTexture, kiwiRect, Color.White);
            }
        }
    }
然后我把这个函数放在主游戏类的Draw函数中

    protected override void Draw(GameTime gameTime)
    {

         GraphicsDevice.Clear(Color.CornflowerBlue);
         spriteBatch.Begin();

         if (gameState == GameState.Playing)
         {


             GraphicsDevice.Clear(Color.Green);




             kiwiClass.Intersect(Sprite.spriteDestinationRectangle, spriteBatch);


             Sprite.Draw(spriteBatch);


         }



         spriteBatch.End();


         base.Draw(gameTime);
      }

你应该只检查是否有交叉口,直到有交叉口为止。你永远不想做isCollected=false,否则猕猴桃会重新出现

您的Intersect方法应如下所示:

public void Intersect(Rectangle rectangle, SpriteBatch spriteBatch)
{
    foreach (Rectangle kiwiRect in kiwiRectangle)
    {
        if (!isCollected)
        {
            if (kiwiRect.Intersects(playerRect))
            {
                isCollected = true;
            }
        }

        if (!isCollected)
        {
            spriteBatch.Draw(kiwiTexture, kiwiRect, Color.White);
        }
    }
}
编辑:实际上,你需要单独跟踪每一只猕猴桃的收集状态。您可以改为将isCollected更改为列表:

List<Rectangle> collectedKiwis = new List<Rectangle>();

嗯,你似乎没有在你的每个游戏对象上使用可覆盖的绘制方法。你能准确地说明这个相交方法的用途吗?你的kiwis DrawableGame组件吗?或者它们只是在那个类的某个地方的列表中?您的方法使它们立即消失,然后它们就不再出现了all@user2681474听起来你好像没把它扔掉!在kiwiRect之前。相交。。。。只需复制并粘贴我的代码就可以了。不,是我做的。我完全照抄了你写的东西。
public void Intersect(Rectangle rectangle, SpriteBatch spriteBatch)
{
    foreach (Rectangle kiwiRect in kiwiRectangle.Except(collectedKiwis))
    {
        if (kiwiRect.Intersects(playerRect))
        {
            collectedKiwis.Add(kiwiRect);
        }
        else
        {
            spriteBatch.Draw(kiwiTexture, kiwiRect, Color.White);
        }
    }
}