Xna 如何从Game.Components中删除游戏组件?
基本上,我的游戏是用一块木板阻止岩石从天上掉下来。 我不确定哪些功能不正常,但以下是我的代码: 在RockManager课程中Xna 如何从Game.Components中删除游戏组件?,xna,sprite,collision,monogame,Xna,Sprite,Collision,Monogame,基本上,我的游戏是用一块木板阻止岩石从天上掉下来。 我不确定哪些功能不正常,但以下是我的代码: 在RockManager课程中 public void CheckForPlankCollision(Plank plank) { foreach (GameComponent component in Game.Components) { if (component is FallingRock rock) { if (plan
public void CheckForPlankCollision(Plank plank)
{
foreach (GameComponent component in Game.Components)
{
if (component is FallingRock rock)
{
if (plank.Bounds.Intersects(rock.Bounds))
{
rock.HandleCollision();
Rectangle bounds = rock.Bounds;
}
}
}
}
在岩石课上
public void HandleCollision()
{
//rockPosition = rockAfterImpactPosition; // I tried to move it offscreen
//rockPosition = Vector2.Zero; //I tried for any reaction
//this.Enabled = false; // tried this
//Game.Components.Remove(this); //tried this
}
我还尝试实施一个评分系统。(如果岩石撞击木板,则增加1点,如果岩石撞击地面,则减少1点)尝试将此作为
IGameComponent
或游戏组件
对象进行铸造
public void HandleCollision()
{
移除((GameComponent)这个);
}
告诉我这是否适合你
编辑:当
foreach(game.Components中的GameComponent组件)
循环不使用游戏对象时,您可能还希望将游戏对象的删除推迟到以后,在这段时间内,它可能会锁定删除元素。尝试将此
转换为IGameComponent
或游戏组件
对象
public void HandleCollision()
{
移除((GameComponent)这个);
}
告诉我这是否适合你
编辑:您可能还希望将游戏对象的删除推迟到以后,
foreach(game.Components中的GameComponent组件)
循环不使用该对象时,该循环可能会锁定在此期间删除元素。我们需要更多信息来帮助您。您似乎正在使用一个框架来管理您的组件,我们需要知道是哪一个。我们可能还需要更多的代码,因为您添加的代码不足以正确理解情况。我更喜欢使用敌人列表(或岩石,在您的情况下)并在屏幕上可见时将岩石添加到岩石列表中,在需要移除岩石时将其从列表中移除。@abosquet他没有使用任何花哨的东西,这些都包含在@fdrobidoux中。你在这方面是100%正确的,我的错。我们需要更多的信息来帮助你。您似乎正在使用一个框架来管理您的组件,我们需要知道是哪一个。我们可能还需要更多的代码,因为您添加的代码不足以正确理解情况。我更喜欢使用敌人列表(或岩石,在您的情况下)并在屏幕上可见时将岩石添加到岩石列表中,在需要移除岩石时将其从列表中移除。@abosquet他没有使用任何花哨的东西,这些都包含在@fdrobidoux中。你在这方面是100%正确的,我的错。不客气。既然你这么说了,我想鼓励你把我的答案标记为解决你问题的答案。不客气。我很乐意鼓励你将我的答案标记为解决你问题的答案,因为你提到过。