【问题标题】:C# XNA Array RemovalC# XNA 数组移除
【发布时间】:2015-02-15 23:57:33
【问题描述】:

我正在尝试制作一个简单的破砖游戏。我用碰撞和简单的物理学创造了一切。球从桨和墙壁上反弹,但我在砖块上遇到了麻烦。我可以让球从砖块上反弹,我只是没有足够的经验知道如何让砖块消失。砖是一个阵列。有什么方法可以删除数组的砖/特定索引吗?

这就是我创建块的方式

        int blockCount=0;

        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 5; y++)
            {
                blocks[blockCount] = Content.Load<Texture2D>("Block");
                blocksPosition[blockCount].X = 95 + (x * 75);
                blocksPosition[blockCount].Y = 20 + (y * 50);
                blockCount++;
            }
        }

这就是我如何进行碰撞以及如何实现砖块移除

    public void DetectBlockBallCollision()
    {
        for (int i = 0; i<40; i++)
        {
            if ((ballPosition.Y + ball.Height) >= blocksPosition[i].Y &&
                (ballPosition.Y + ball.Height) < (blocksPosition[i].Y+75) &&
                (ballPosition.X + ball.Width) > blocksPosition[i].X &&
                ballPosition.X < (blocksPosition[i].X + blocks[i].Width))
            {
                movingUp = false;
                //whatever would get rid of block;
            }

        }

    }

【问题讨论】:

  • 我会在砖块上创建一个ActiveVisible 属性,然后使用它来确定是否绘制它和/或计算它的碰撞。您也可以将元素设置为 null 并在循环中检查 null。

标签: c# arrays methods xna


【解决方案1】:
  1. 不要在循环中加载纹理,只在 LoadContent 中加载一次。
  2. 在你的积木元素中正确放置 Active(如 TyCobb 建议的那样),并在 collsion 中将其设置为 true,然后在循环外的某个位置将其删除。

    bricks.removeAll(b => !(b.active))

根据不同的属性,你的砖块可能有生命值、可破坏属性、掉落某些物品的砖块......

【讨论】:

  • 谢谢,这很有帮助。
【解决方案2】:

二维数组可用于逐格对齐。块将通过网格单元坐标在 X 和 Y 上以固定像素步长排列,位置定义为 (col * step_x, row * step_y)。然后,对于 int 值的数组,0 表示没有块,非零值表示来自块寄存器的块 ID。该寄存器应保持该块的所有单元(具有相同 ID)的通用数据。这种方法最适合一击就可以破坏的方块。为了更耐用,可以使用相同总块的多个变体,例如,如果砖块 (1 HP) 的 ID = 1,石块 (2 HP) 的 ID = 2 表示未损坏,ID = 3 表示损坏,铁具有 3/2/1 HP 的方块的 ID = 4/5/6,依此类推。然后需要将数组中设置的单位去掉为0。

第二种方式是使用列表。块应该以对象的形式呈现,每个对象都知道它的坐标、最大和当前生命值、特殊状态等。当你击中它时,你实际上可以从列表中删除块的好处,它的 HP 变为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多