【发布时间】:2011-03-19 07:11:54
【问题描述】:
我正在尝试找出一个可以轻松地动态修改对象的系统。
这是一个例子,假设我有一个继承自 Entity 的 Entity2D。 Entity2D 有一个 Position 属性。
现在我有一个名为 ModifyPosition 的类,它继承自 Modifier。
这是一些代码
public class Entity
{
/// <summary>
/// Applies the modifier to this entity.
/// </summary>
/// <param name="modifier">The modifier to apply.</param>
public void ApplyModifier(Modifier modifier)
{
modifier.Apply(this);
}
}
/// <summary>
/// Modifies an entities position
/// </summary>
public class ModifyPosition : Modifier
{
/// <summary>
/// Initializes a new instance of the <see cref="ChangePosition"/> class.
/// </summary>
/// <param name="position">The position.</param>
public ChangePosition(Vector2 position)
{
this.Position = position;
this.IsModifyingChildren = false;
}
/// <summary>
/// Gets the position.
/// </summary>
/// <value>The position.</value>
public Vector2 Position { get; private set; }
/// <summary>
/// Applies this change to the specified entity.
/// </summary>
/// <param name="entity">The entity.</param>
internal override void Apply(Entity entity)
{
((Entity2D)entity).X += this.Position.X;
((Entity2D)entity).Y += this.Position.Y;
}
}
但如果你每秒调用多次,我认为强制转换会减慢它。
有没有其他方法可以解决这个问题而不必强制转换?
【问题讨论】:
-
你做了什么,删除并重新提出问题?不是获得答案的好方法
-
让一个对象出现并从外部修改一个对象可能很奇怪(并且可以说违反了几个准则)。有什么理由需要这样做,而不是将修改代码放在对象内部?
-
@Lucas 它是一个继承者... =/ 我没有阅读发布的答案,所以我试图重新问它...对不起。你之前回答过吗?你介意重新发布你的答案吗?再次抱歉,这是我的错误。 @silky我在想,如果我有办法从外部修改对象,它会更容易像在编辑器中那样动态更改对象的属性。
-
@Chris:在其中构建修改过程几乎总是更好。原因是您可以在类中编写特定于类的代码,并且您可以访问私有功能等。考虑更改使用这种方法,我基本上保证你的生活会更好,你的代码会更容易理解:)
-
我认为 Entity 最好有一个 Apply(IModifier modifier) 方法。 entity.Apply(moveToNewPosition) 看起来更有用
标签: c# game-engine access-modifiers