如何修改C#游戏代码使动物生成逻辑仅执行一次
修改方案
你只需要新增一个状态标记位,触发一次生成后直接终止所有循环即可,修改后的完整代码如下:
public static void Generate( Rectangle2D region ) { int OakTree = 0x12B9; // 新增标记位,记录是否已经完成生成 bool hasSpawned = false; for ( int rx = 0; rx < region.Width && !hasSpawned; ++rx ) { for ( int ry = 0; ry < region.Height && !hasSpawned; ++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 && !hasSpawned; ++i ) { StaticTile tile = tiles[i]; int id = tile.ID; id &= 0x3FFF; int z = tile.Z; if ( IsRock( id ) ) { AddAnimalSpawner( vx + 1, vy, z ); // 生成完成后标记为true,所有循环都会在下一次判定时终止 hasSpawned = true; } } } } }
逻辑说明
- 新增的
hasSpawned变量初始为false,表示还未执行过生成操作 - 三个循环的终止条件都新增了
&& !hasSpawned判定,只要标记位变为true,循环就会立即终止 - 第一次匹配到符合条件的地砖完成生成后,标记位会被置为
true,后续所有地砖的判定逻辑都不会再执行
内容的提问来源于stack exchange,提问作者Kiko Fernandez Ruiz
相关产品推荐
相关产品推荐

