微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

非活动窗口使时间混乱

如何解决非活动窗口使时间混乱

这是一个奇怪的解释。我有一个粒子系统,其中每一帧我都会创建一个新粒子,直到有一定数量的粒子。这会产生类似条纹的效果,如下所示:

enter image description here

我遇到的问题是,当我切换到不同的窗口并返回到我的页面时,似乎所有这些粒子都是同时产生的,导致出现的不是条纹,而是点:

enter image description here

粒子创建和回收的代码在这里

Update(felapsed){
this.AddParticle();

let vec = GetVectorFromAngle(this.Player.Rigidbody.Orien);
vec.Mult(-1 * 50);

for (let i = 0; i < this.Particles.length; i++){
  let item = this.Particles[i];

  item.DrawRes.Opacity = Lerp(0,1,item.Lifetime);
  item.Lifetime -= felapsed;

  if (item.Lifetime < 0){item.Restart(this.Rigidbody.Pos,copyInstance(vec));}

}

此处添加粒子功能

if (this.ParticleCount < this.ParticleLimit){
  let p = new this.ParticleType();
  this.Particles.push(p);
  Game.Addobject(p);
  this.ParticleCount++;
}

最后是 Particle.Restart 函数

this.Lifetime = this.Life;
this.Rigidbody.Pos = locate;
this.Rigidbody.Vel.Mult(0);
this.Rigidbody.Vel = vel;

我怀疑我在做一些愚蠢的事情,但完全没有注意到,有什么提示吗?

解决方法

我找到了解决方案。当浏览器处于非活动状态或不同的选项卡处于活动状态时,帧时间会增加超过正常预期结果的超时时间,直到游戏选项卡处于活动状态。这意味着我的所有粒子都将在同一帧中死亡并重新启动,因此它们变得同步。

我选择的修复非常不完整,会做得更好,但在每一帧的开始,我检查 felapsed 以确保它没有超过正常的预期时间(0.6),如果是,只需将 felapsed 设置为 0那个框架。

基本上,我在浏览器不活动时暂停了游戏:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。