我正在制作2D太空射击游戏,我遇到了盾牌加电的问题。盾牌使玩家在敌方舰船上碰撞一段时间后立于不败之地。当玩家与通电器发生碰撞时,玩家在一段时间内无敌,此时玩家离开上电位置并且从屏幕移除加电,这一切都正常。然而,我遇到的问题是,即使玩家在绘制方法中从屏幕上移除,玩家仍然可以与它发生碰撞,这意味着玩家可以简单地留在那个位置并永远立于不败之地。因此,一旦玩家与盾牌相撞,我希望它能让玩家再次与它发生碰撞。我尝试过在线搜索,但我还没找到任何特别有用的东西。 我也想再次使用这个电源。在未来,我计划随机添加它们'在我的滚动背景中。不确定这是否会添加任何内容,只是认为我会包含它。
game1.cs
public double counterPower = 0;
public bool powerUpCollision = false;
public bool invincibility = false;
Sprite shieldPower;
bool isVisible = true;
protected override void Initialize()
{
shieldPower = new Sprite();
}
protected override void LoadContent()
{
if (isVisible == true)
{
shieldPower.LoadContent(this.Content, "powerUpShield");
shieldPower.Position.X = 300;
shieldPower.Position.Y = 300;
}
}
protected override void Update(GameTime theGameTime)
{
powerUps(theGameTime);
}
public void powerUps (GameTime theGameTime)
{
if (mPlayer.boundingBox.Intersects(shieldPower.boundingBoxShieldPower))
{
if (shieldPower.isVisible == true)
{
Console.WriteLine("collision working");
powerUpCollision = true;
invincibility = true;
isVisible = false;
if (powerUpCollision == true && invincibility == true)
{
lives = lives - 0;
}
counterPower = 0;
}
}
counterPower += theGameTime.ElapsedGameTime.TotalSeconds;
{
Console.WriteLine(counterPower);
if (counterPower > 7)
{
powerUpCollision = false;
invincibility = false;
}
}
protected override void Draw(GameTime theGameTime)
{
spriteBatch.Begin();
if (isVisible == true)
{
shieldPower.Draw(this.spriteBatch);
}
}
spriteBatch.End();
在sprite类中是加电的边界框,这很好用。 我有更多的代码和课程,但我相当确定很多与此问题无关,我也不想浪费你的时间。
非常感谢任何帮助。 谢谢。
答案 0 :(得分:0)
我首先建议将边界框设置为null或某处不可能与之碰撞。这听起来像是玩家船与物体碰撞,因为即使它没有显示,它的所有属性仍然存在于系统中。所以,让它不可见并将其隐藏在屏幕外是一种选择,尽管如果你在应该调用它时用其他代码设置位置就可以了。
第二件事,如果游戏中存在加电,则设置一个标志。基本上筑巢你的所有"当船撞到它时这样做"在if语句中,以便它只在您希望它时应用,并且在条件未满足时将跳过该代码。如果边界框不会影响其他任何东西,你实际上可以这样做,而不是第一部分。
编辑:澄清一下,如下:
if(ship.hitsPowerup)
{
if(powerup.isActive)
{
doTheThing;
powerup.isActive = false;
}
}