You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用继承: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:31:13