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

React中Phaser如何从Bootstrap场景预加载资源到GameScene?

解决方案

情况1:无需重复加载,直接使用资源

Phaser中的资源是全局共享的——只要Bootstrap场景已经完成预加载(你的配置里已经把它放在场景数组的第一位,会优先执行),GameScene不需要在preload里写任何加载代码,直接在create方法中使用这些资源即可:

create() {
  // 直接使用Bootstrap加载好的资源
  const player = this.add.sprite(100, 100, 'adam');
  const map = this.make.tilemap({ key: 'tilemap' });
  const tileset = map.addTilesetImage('Serene_Village_48x48_extruded', 'tiles');
  // 其他资源使用逻辑...
}

情况2:复用Bootstrap的预加载逻辑(避免重复代码)

如果需要让GameScene也能独立加载这些资源(比如场景执行顺序不确定),可以把加载逻辑抽成独立函数复用:

  1. 创建共享加载工具函数(比如src/utils/preloadSharedAssets.js):
export const preloadSharedAssets = (scene) => {
  scene.load.spritesheet('adam', 'sprites/adam.png', {
    frameWidth: 32,
    frameHeight: 48,
  });
  scene.load.image('tiles', 'maps/Serene_Village_48x48_extruded.png');
  scene.load.image('collision', 'maps/Collision_48x48.png');
  scene.load.tilemapTiledJSON('tilemap', 'maps/SereneVillage_Demo.json');
};
  1. 修改Bootstrap场景调用该函数:
import Phaser from 'phaser';
import { preloadSharedAssets } from '@/utils/preloadAssets';

export default class Bootstrap extends Phaser.Scene {
  constructor() {
    super('Bootstrap');
  }

  preload() {
    preloadSharedAssets(this);
  }
}
  1. 在GameScene的preload中调用同一函数:
import Phaser from 'phaser';
import { preloadSharedAssets } from '@/utils/preloadAssets';

export default class GameScene extends Phaser.Scene {
  constructor() {
    super('GameScene');
  }

  preload() {
    preloadSharedAssets(this);
  }
}

注意:Phaser会自动跳过已加载的资源,即使重复调用加载方法也不会重复发起网络请求,不会有性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:25