定时器来控制XNA中的对象

我认为这是一个很棒的概念, 一个方法是在创建对象时在构造函数中激活的,在下面的代码中,在3秒钟之后调用另一个对象将其从列表中移除,但不幸的是,这不是我想要的方式! 计时器似乎有一些问题,因为移除对象的调用是立即完成的! 我错过了什么,或者这不可能? 也许以另一种方式?

public void ExplosionTimer(GameTime gameTime) { seconds += (float)gameTime.ElapsedGameTime.TotalSeconds; if (seconds > 3) objectManager.ExplosionControl(); } 

从构造函数激活的方法是做什么的? 允许gameobject是可分解的? 你在构造函数中设置秒= 0? objectManager.ExplosionControl()做什么? 遍历所有的对象,并find秒> 3? 如果是这样,为什么你不只是传递对象本身,并要求它从列表中删除?

 objectManager.removeExplodedObject( this ); // for example 

你所描述的应该工作。 你是否在每次更新时调用ExplosionTimer?

不完全是你的问题的答案,而只是一个替代你的计时器逻辑。 您还可以定义一个字段,用于存储未来的时间,以便触发您的行为。

下面的例子会导致损害,并且每半秒触发一次粒子效应,如果这个方法比那个周期更频繁地被调用的话。

  private double _particleTimeSpan; public override void OnHurt(Vector2 location, float amount, DamageTypeEnum type, Actor cause, GameTime gameTime) { if (_particleTimeSpan < gameTime.ElapsedGameTime.TotalSeconds) { _hurtParticle.Trigger(location); Health -= amount; _particleTimeSpan = gameTime.ElapsedGameTime.TotalSeconds + 0.5; } }