首先,我想说我的问题更多是关于设计一个好的面向对象系统而不是游戏开发。我正在制作一款太空射击游戏,其中包含子弹、敌人、大石头和宇宙飞船(玩家)等物体。我有一个碰撞管理器(静态类),每帧检查碰撞。为了将子弹的“效果”传递给宇宙飞船或敌人,我这样做了:
Interface IHit
{
Action<BaseGameSprite> GetEffect();
}
*例如在子弹课上我做了:
return new Action<ICollisionInterest>(gameobject =>
{
gameobject.LifePoints -= Damage;
});
在碰撞管理器中,如果他发现碰撞:
TheHitObject.GetEffect()(HittenObject);
该解决方案有效,但我不确定它是否是一个好的设计,因为 GetEffect() 完全破坏了封装,而且子弹似乎可以对 HittenObject(宇宙飞船或敌人)做任何他想做的事情。所以我的问题是:这是一个好的设计?或者我应该使用不同的东西?