首页 > 解决方案 > 轰炸机的爆炸有时无法正常工作

问题描述

我正在制作一个轰炸机以获得乐趣,但爆炸的循环存在问题。有时它会正常工作并在破坏块时停止,但有时它会继续运行直到达到最大爆炸大小。

为了帮助可视化:

Explosion size = 5
layout:                      Bomb     |Empty    |Breakable|Breakable|Breakable|Breakable
becomes sometimes (correct): Explosion|Explosion|Explosion|Breakable|Breakable|Breakable
and sometimes (incorrect):   Explosion|Explosion|Explosion|Explosion|Explosion|Breakable

就像代码中有时会忽略中断一样。没有模式,代码确实正确识别所有块

这是控制爆炸右侧的代码。

for (int j = 1; j < player.ExplosionSize; j++)
{
    breakPointRight = j + 1;
    if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.unbreakable)
        break;
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.free)
        map.ArrayMap.SetValue(Constants.ENUMMAP.explosion, (int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y);
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.breakable)
    {
        CalculateChanceforPickup((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y);
        break;
    }
    //check if block is a pickup
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) > (int)Constants.ENUMMAP.free)
    {
        map.ArrayMap.SetValue(Constants.ENUMMAP.explosion, (int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y );
        break;
    }
}

标签: c#for-loopmonogame

解决方案


推荐阅读