首页 > 解决方案 > 新来的,需要帮助才能“行动”一次

问题描述

我有一个游戏代码,正在工作和做: *当瓷砖被接受时,在地砖中生成一只动物,但在所有接受的瓷砖中都做。我希望脚本只执行一次,这里的代码:

public static void Generate( Rectangle2D region )
    {
        int OakTree = 0x12B9;
        
        for ( int rx = 0; rx < region.Width; ++rx )
        {
            for ( int ry = 0; ry < region.Height; ++ry )
            {
                int vx = rx + region.X;
                int vy = ry + region.Y;

                StaticTile[] tiles = m_Map.Tiles.GetStaticTiles( vx, vy );

                for ( int i = 0; i < tiles.Length; ++i )
                {
                    StaticTile tile = tiles[i];

                    int id = tile.ID;
                    id &= 0x3FFF;
                    int z = tile.Z;

                    if ( IsRock( id ) )
                    {
                        AddAnimalSpawner( vx + 1, vy, z );
                    }
                }
            }
        }
    }

将其简化为一次的正确方法是什么?我认为问题是for ( int i = 0; i < tiles.Length; ++i )。谢谢!

标签: c#

解决方案


如果我对您的理解正确,您只想打AddAnimalSpawner一次电话。

您可以简单地使用break关键字。( https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/break ) 返回外部循环或return退出Generate(Rectangle2D region)函数。

例子:

for ( int i = 0; i < tiles.Length; ++i )
{
    StaticTile tile = tiles[i];
 
    int id = tile.ID;
    id &= 0x3FFF;
    int z = tile.Z;

    if ( IsRock( id ) )
    {
        AddAnimalSpawner( vx + 1, vy, z );
        break;
    }
}

或者

for ( int i = 0; i < tiles.Length; ++i )
{
    StaticTile tile = tiles[i];
 
    int id = tile.ID;
    id &= 0x3FFF;
    int z = tile.Z;

    if ( IsRock( id ) )
    {
        AddAnimalSpawner( vx + 1, vy, z );
        return;
    }
}

推荐阅读