不使用继承:MonoGame中IEntity实现类复用Position计算方案问询
不使用继承实现IEntity的Position计算逻辑复用
最简单的实现方式是封装静态工具类,把重复的Position计算逻辑抽离成独立的静态方法,让所有实现IEntity的类直接调用该方法完成赋值,完全规避继承。
步骤1:创建静态工具类
public static class EntitySpawnHelper { public static Vector2 CalculateSpawnPosition(Scene scene, int entitySize, Vector2 spawnOffset) { return new Vector2( spawnOffset.X * scene.TileSize + scene.Room.Center.x - entitySize / 2, spawnOffset.Y * scene.TileSize + scene.Room.Center.y - entitySize / 2); } }
步骤2:修改Player和Enemy类的构造器
Player类
public class Player : IEntity { public int Size { get; } = 32; public Vector2 Position { get; private set; } public Player(Scene scene) { var spawnOffset = new Vector2(0, -3); Position = EntitySpawnHelper.CalculateSpawnPosition(scene, Size, spawnOffset); } }
Enemy类
public class Enemy : IEntity { public int Size { get; } = 32; public Vector2 Position { get; private set; } public Enemy(Scene scene) { var spawnOffset = new Vector2(0, 0); Position = EntitySpawnHelper.CalculateSpawnPosition(scene, Size, spawnOffset); } }
优点说明
- 完全脱离继承依赖,符合需求;
- 计算逻辑集中维护,后续修改只需要调整
EntitySpawnHelper中的方法,所有调用处自动生效; - 代码简洁直观,新增实现
IEntity的类时,直接调用工具方法即可完成Position计算。
内容的提问来源于stack exchange,提问作者lukkasz323
相关产品推荐
相关产品推荐

