Scene

代码示例

场景相关代码示例

客户端场景

预加载场景资源

如果在编辑器中勾选了相关预加载项则除了场景基础制作数据外还会额外加载勾选项的内容。

Script.ts
AssetManager.preLoadSceneAsset(场景ID, Callback.New(() => {
    // 加载完成后执行的逻辑
}, this), true, false);

创建场景

可用于主场景、制作小地图、同屏多场景等地方。

如果是主场景则需要在进入新场景后记录一下Game.currentScene。

Script.ts
// 当监听到需要进入到新的主场景后执行:
ClientScene.createScene(场景ID, Callback.New((scene:ClientScene)=>{
    // 记录当前的场景
    Game.currentScene = scene;
    // 添加到指定层级上(游戏总层级参考 GameLayer)
    Game.layer.sceneLayer.addChild(scene.displayObject);
    // 场景开始渲染(如果不开始渲染则场景处于静止状态)
    Game.currentScene.startRender();
}, this), null, true);

控制场景上的镜头

镜头跳转到指定的场景位置(如像素坐标点500,500)

Script.ts
// 先取消锁定目标,如果未锁定目标的话可以不调用此代码
Game.currentScene.camera.sceneObject = null;
// 再设置指定的位置
Game.currentScene.camera.viewPort.x = 500;
Game.currentScene.camera.viewPort.y = 500;

镜头绑定场景对象

Script.ts
// 镜头锁定当前场景中ID=1的场景对象(可优化先缓动到他坐标这里再锁定)
// 该绑定是实时跟随,如果想制作平滑跟随等效果可以不使用绑定镜头,而是自定义控制镜头坐标。
Game.currentScene.camera.sceneObject = Game.currentScene.sceneObjects[1];

场景图层操作

创建一个图片图层添加到当前场景上

Script.ts
// 创建一个图层,并设置图片,添加到场景上,默认在左上角(0,0)
let layer = new ClientSceneLayer(Game.currentScene);
layer.setBigImage("asset/image/xxxx.png");
Game.currentScene.addLayer(layer);

创建一个图块图层,绘制图块

Script.ts
// 创建一个图块图层
let layer = new ClientSceneLayer(Game.currentScene);
layer.drawMode = true;
layer.graphics.drawRect(0,0,100,100,"#FF0000");
// 加载指定的贴图作为图块素材
AssetManager.loadImage("asset/image/tile/矿洞.png", Callback.New((tex: Texture) => {
    // 从图源0,0中取得48x48的图绘制到格子3,0的位置上
    layer.drawTile(3, 0, { tex: tex, texID: 1, x: 0, y: 0, w: 48, h: 48 });
    // 从图源96,0中取得48x48的图绘制到格子4,0的位置上
    layer.drawTile(4, 0, { tex: tex, texID: 1, x: 96, y: 0, w: 48, h: 48 });
    // 提交绘制
    layer.flushTile();
}, this));
// 添加到场景上
Game.currentScene.addLayer(layer);

获取场景上的场景对象

Script.ts
// 获取ID=5的场景对象
let so:ClientSceneObject = Game.currentScene.sceneObjects[5] as ClientSceneObject ;

Copyright © 2021 - 2025