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