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

Phaser 3:根据玩家距离调整推车音效音量(代码无效果)

解决Phaser 3中音效音量随距离动态变化的问题

你的代码仅在音效启动时计算一次距离并设置音量,没有在推车或玩家移动时实时更新音量,这是导致音量无变化的核心原因。以下是具体修复方案:

1. 正确初始化循环音效

在场景的create方法中创建可循环的音效实例(推车移动是持续动作,音效需循环播放):

create() {
  // 创建循环音效,初始音量设为0
  this.cartSound = this.sound.add("cartSound", { loop: true, volume: 0 });
}

2. 实时更新音量

在场景的update方法中,持续计算玩家与推车的距离并动态调整音量:

update() {
  // 音效未播放时跳过更新
  if (!this.cartSound.isPlaying) return;

  const distanceThreshold = 400;
  const distanceToObject = Phaser.Math.Distance.Between(
    this.player.x, this.player.y, this.cart1.x, this.cart1.y
  );
  
  // 计算音量并限制在0-1的有效范围内
  let volume = 1 - (distanceToObject / distanceThreshold);
  volume = Phaser.Math.Clamp(volume, 0, 1);
  
  this.cartSound.setVolume(volume);
}

3. 简化音效启动逻辑

调整startCartSound方法,仅负责启动音效(音量计算交由update处理):

startCartSound() {
  if (!this.cartSound.isPlaying) {
    this.cartSound.play();
  }
}

额外提示

  • 推车停止移动时,调用this.cartSound.stop()终止音效。
  • 可根据游戏场景需求调整distanceThreshold数值,数值越大,音效可被听到的范围越广。

内容的提问来源于stack exchange,提问作者Chiara Maiutto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:30:46