ClientScene 客户端游戏场景

场景一般由地图图像和场景上的对象(ClientSceneObject)组成
-- 图层支持:图块图层和图片图层,可自定义,支持无限层
-- 场景对象支持:添加场景对象在场景上
-- 镜头控制 Camera
【新建场景】 ps:利用相机以及当前的场景还可以很方便的制作小地图
 // 方法一:创建一个5号场景(不包含场景中预摆放的对象),一个实例仅允许设置一次id
 var s = new ClientScene();
 s.id = 5;
 s.startRender();
 stage.addChild(s.displayObject); // 游戏显示层参考 GameLayer.d.ts
 // 方法二:通过ClientScene.createScene来创建场景,无需指定场景的绑定类,系统根据预设自动新建该场景的绑定类
 ClientScene.createScene(sceneModelID, null, Callback.New(()=>{}, this), true);
【其他事件】
 EventObject.LOADED 地图全部图层资源加载完毕时 如 scene.on(EventObject.LOADED,this,()=>{});
【层次】总层次可参考 GameLayer
以下是引擎默认的游戏显示层次参考:
-- 场景层 sceneLayer
    - 编辑器预设的自定义底层(比对象层更低的图层)
    - 影子层 shadowLayer
    - 动画层-底层 animationLowLayer
    - 对象层-底层 sceneObjectLowLayer 同时开启了子对象根据Y值自动更换层次
    - 对象层-中层 sceneObjectLayer 同时开启了子对象根据Y值自动更换层次
    - 编辑器预设的自定义高层 (比对象层更高的图层)
    - 对象层-高层 sceneObjectHighLayer 同时开启了子对象根据Y值自动更换层次
    - 动画层-高层 animationHighLayer
    - 雾层 fogLayer
    - 天气层 weaterLayer
-- 图片层 imageLayer
-- UI层 uiLayer

维护人员:黑暗之神KDS
创建时间:2018-07-22

继承Scene
子类

Public 属性

属性
BASE_DATA_LOADED : string;
静态事件:基础数据加载完毕(可用于快速切入场景,而后再加载动态相关资源)回调参数:onBaseDataLoaded(scene:ClientScene) 默认值="ClientScene_BASE_DATA_LOADED"
EVENT_IN_NEW_SCENE : string;
静态事件:进入新的场景 onInNewScene(sceneID:number,state:number) state:0-切换场景 1-新游戏 2-读取存档
EMPTY : ClientScene;
静态空的场景,游戏启动时则为空场景状态,可用于判定
isDisposed : boolean;
是否已卸载
mapSupportPause : boolean;
支持暂停(支持Game.pause效果,暂停后场景停止渲染)
sceneObjects : ClientSceneObject;
场景对象列表:场景上全部的场景对象 场景对象.index -> 场景对象
settingLayers : ClientSceneLayer;
预先设定的图层显示对象集合(来自地图编辑器中预设)
displayObject : GameSprite;
场景的显示对象(根容器)
shadowLayer : ClientSceneLayer;
影子层
animationLowLayer : ClientSceneLayer;
动画层:底层
sceneObjectLowLayer : ClientSceneLayer;
对象层:底层
sceneObjectLayer : ClientSceneLayer;
对象层:中间层
sceneObjectHighLayer : ClientSceneLayer;
场景对象:最高层
animationHighLayer : ClientSceneLayer;
动画层:高层
fogLayer : ClientSceneLayer;
雾层
weaterLayer : ClientSceneLayer;
天气层
camera : Camera;
场景的镜头
localX : number;
只读获取鼠标X所在的场景位置(单位:像素)
localY : number;
只读获取鼠标Y所在的场景位置(单位:像素)
globalPos : Point;
只读获取鼠标绝对位置(相对于舞台)(单位:像素)

Public 方法

方法
createScene(sceneID : number, onBaseDataLoaded? : Callback, onLoaded? : Callback, syncCallbackWhenAssetExist? : boolean): void
静态创建场景,会根据预设的实现类来创建对应的实例场景
dispose(): void
释放当前的场景
addLayer(layer : ClientSceneLayer): void
添加图层
addLayerAt(layer : ClientSceneLayer, index : number): void
添加图层到指定层
removeLayer(layer : ClientSceneLayer): void
移除图层
removeLayerAt(index : number): void
指定移除某一层的图层
setLayerIndex(layer : ClientSceneLayer, index : number): void
设置图层到指定的层,该层必须已经在场景上
getLayerLength(): number
获取当前的图层总数
getLayer(index : number): ClientSceneLayer
获取层,根据实际层次索引
getLayerByPreset(id : number): ClientSceneLayer
获取层,根据预设层次
getLayerByName(name : string): ClientSceneLayer
获取层根据名称
getPresetSceneObjectDatas(): SceneObject
获取场景预设的场景对象数据(不包含出生点)
addSceneObject(soData : SceneObject, isEntity? : boolean, useModelClass? : boolean, className? : string): ClientSceneObject
场景对象添加到场景上
removeSceneObject(so : SceneObject, removeFromList? : boolean): ClientSceneObject
从场景上移除场景对象
addNewSceneObject(modelID : number, presetSceneObjectData? : any): ClientSceneObject
添加新对象,以默认值生成新的对象,同时也可以追加修改属性(presetSceneObjectData)
addSceneObjectFromClone(fromSceneID : number, fromSceneObjectindex : number, isCopy? : boolean, presetSceneObjectData? : any): ClientSceneObject
克隆并添加场景对象
getGlobalPos(localX : number, localY : number): Point
获取绝对鼠标位置(相对于舞台)根据指定的场景位置
updateCamera(): void
立刻刷新镜头(默认情况下场景会逐帧刷新镜头,如绑定的场景对象在移动时)
startRender(): void
开始渲染,场景如果未调用的话则处于静止状态,运动的图层等都不播放
stopRender(LayerMoveToZero? : boolean): void
停止渲染
hasListener(type : string): boolean
检查场景是否为特定事件类型注册了任何侦听器
event(type : string, data? : any): boolean
场景派发事件
on(type : string, caller : any, listener : Function, args? : Array): ClientScene
使用场景注册指定类型的事件侦听器对象,以使侦听器能够接收事件通知
once(type : string, caller : any, listener : Function, args? : Array): ClientScene
使用场景注册指定类型的事件侦听器对象,以使侦听器能够接收事件通知,此侦听事件响应一次后自动移除
off(type : string, caller : any, listener : Function, onceOnly? : boolean): ClientScene
从场景中删除侦听器
offAll(type? : string): ClientScene
从场景中删除指定事件类型的所有侦听器

Protected 方法

方法
onRender(): void
渲染:当Game.pause时则不处理刷新(update)

详情

BASE_DATA_LOADED

BASE_DATA_LOADED : string;

静态事件:基础数据加载完毕(可用于快速切入场景,而后再加载动态相关资源)回调参数:onBaseDataLoaded(scene:ClientScene) 默认值="ClientScene_BASE_DATA_LOADED"
监听基础资源加载完毕示例:

 var s = new ClientScene();
 s.id = 5;
 s.on(ClientScene.BASE_DATA_LOADED)
 s.startRender(ClientScene.BASE_DATA_LOADED,this,(s:ClientScene)=>{
     // to do
 });
 stage.addChild(s.displayObject);

EVENT_IN_NEW_SCENE

EVENT_IN_NEW_SCENE : string;

静态事件:进入新的场景 onInNewScene(sceneID:number,state:number) state:0-切换场景 1-新游戏 2-读取存档
监听来自切换场景事件、新游戏、读取存档的事件,以便项目层实现更换场景的效果 默认值="ClientSceneEVENT_IN_NEW_SCENE"

 // sceneModelID = 场景模型ID,对应编辑器的场景ID(如果是网络版可能是副本场景,但模型来源仍然是预设的场景)
 EventUtils.addEventListenerFunction(ClientScene, ClientScene.EVENT_IN_NEW_SCENE, (sceneModelID: number, state: number)=>{
   // to do
 }, this);

createScene

createScene(sceneID : number, onBaseDataLoaded? : Callback, onLoaded? : Callback, syncCallbackWhenAssetExist? : boolean): void :

静态创建场景,会根据预设的实现类来创建对应的实例场景

参数
sceneID 场景ID
onBaseDataLoaded [可选] 默认值=null 当基础数据加载完毕时回调 onBaseDataLoaded(scene)
onLoaded [可选] 默认值=null onLoaded(scene)
syncCallbackWhenAssetExist [可选] 默认值=false 当资源存在时同步回调,否则需要等待一帧(异步回调)
返回

ClientScene

dispose

dispose(): void :

释放当前的场景

addLayer

addLayer(layer : ClientSceneLayer): void :

添加图层

参数
layer 图层对象

addLayerAt

addLayerAt(layer : ClientSceneLayer, index : number): void :

添加图层到指定层

参数
layer 图层对象
index 指定层索引

removeLayer

removeLayer(layer : ClientSceneLayer): void :

移除图层

参数
layer 图层对象

removeLayerAt

removeLayerAt(index : number): void :

指定移除某一层的图层

参数
index 指定层索引

setLayerIndex

setLayerIndex(layer : ClientSceneLayer, index : number): void :

设置图层到指定的层,该层必须已经在场景上

参数
layer 图层
index 指定的层索引

getLayerLength

getLayerLength(): number :

获取当前的图层总数

返回

number

getLayer

getLayer(index : number): ClientSceneLayer :

获取层,根据实际层次索引

参数
index 层次索引
返回

图层

getLayerByPreset

getLayerByPreset(id : number): ClientSceneLayer :

获取层,根据预设层次

参数
id 对应地图层预览中的序号

getLayerByName

getLayerByName(name : string): ClientSceneLayer :

获取层根据名称

参数
name 图层的名称
返回

ClientSceneLayer

getPresetSceneObjectDatas

getPresetSceneObjectDatas(): SceneObject :

获取场景预设的场景对象数据(不包含出生点)

返回

场景对象数据集

addSceneObject

addSceneObject(soData : SceneObject, isEntity? : boolean, useModelClass? : boolean, className? : string): ClientSceneObject :

场景对象添加到场景上
由于对象涉及了参数默认值、状态页、预设的对象模块,通常情况下是使用 addNewSceneObject/addSceneObjectFromClone 来创建对象
通常在当前场景上则用于添加已存在的实体对象进来。
示例:

// soc = object ClientSceneObject
Game.currentScene.addChild(soc,true,true);

参数
soData 场景对象数据(可以是纯数据SceneObject或实体对象)
isEntity [可选] 默认值=false 是否是实体对象而非数据,如果是数据则会根据数据重新创建一个实体对象
useModelClass [可选] 默认值=false 是否使用场景对象模型的实现类,项目层通常该值为true
className [可选] 默认值=false 如果存在则根据className创建实例
返回

ClientSceneObject 添加的场景对象实例

removeSceneObject

removeSceneObject(so : SceneObject, removeFromList? : boolean): ClientSceneObject :

从场景上移除场景对象

参数
so 场景对象数据,保证场景对象的index是你需要移除的那个即可
removeFromList [可选] 默认值=false 是否从列表中移除
返回

ClientSceneObject 移除的场景对象实例

addNewSceneObject

addNewSceneObject(modelID : number, presetSceneObjectData? : any): ClientSceneObject :

添加新对象,以默认值生成新的对象,同时也可以追加修改属性(presetSceneObjectData)

参数
modelID 模型ID
presetSceneObjectData [可选] 默认值=null 预设数据,以便生成时使用该数据作为参考,如 {x:500,y:500} className可根据className创建实例
返回

ClientSceneObject

addSceneObjectFromClone

addSceneObjectFromClone(fromSceneID : number, fromSceneObjectindex : number, isCopy? : boolean, presetSceneObjectData? : any): ClientSceneObject :

克隆并添加场景对象
从指定的预设好的场景中指定一个对象为克隆源,然后复制这个对象到当前的场景上。
优先使用fromSceneObjectindex位置存放场景对象,如果该位置已存在对象,则自动计算空位置插入到(this.sceneObjects)
如果来源一个非当前场景,必须在克隆之前有预加载过该场景或创建过该场景:
 -- 预加载场景资源 AssetManager.preLoadSceneAsset 或 创建场景 ClientScene.createScene

参数
fromSceneID 来源的场景ID
fromSceneObjectindex 来源场景中的场景对象ID
isCopy [可选] 默认值=true 是否克隆(用于记录这个对象来自克隆)
presetSceneObjectData [可选] 默认值=null 预设的数据(SceneObject属性),如修改x,y等,在最初即赋值。
返回

ClientSceneObject 场景对象实例,如果没有找到模型的话创建失败返回null

getGlobalPos

getGlobalPos(localX : number, localY : number): Point :

获取绝对鼠标位置(相对于舞台)根据指定的场景位置

参数
localX 场景的坐标x(单位:像素)
localY 场景的坐标y(单位:像素)
返回

Point

updateCamera

updateCamera(): void :

立刻刷新镜头(默认情况下场景会逐帧刷新镜头,如绑定的场景对象在移动时)

startRender

startRender(): void :

开始渲染,场景如果未调用的话则处于静止状态,运动的图层等都不播放

stopRender

stopRender(LayerMoveToZero? : boolean): void :

停止渲染

参数
LayerMoveToZero [可选] 默认值=false 是否图层移动归零,是的话就归零,否则推进移动一帧

hasListener

hasListener(type : string): boolean :

检查场景是否为特定事件类型注册了任何侦听器
@param type 事件的类型。

返回

如果指定类型的侦听器已注册,则值为 true;否则,值为 false。

event

event(type : string, data? : any): boolean :

场景派发事件

参数
type    事件类型。
data    [可选] 默认值=null 回调数据。如果是需要传递多个参数 p1,p2,p3,...可以使用数组结构如:[p1,p2,p3,...] ;如果需要回调单个参数 p 是一个数组,则需要使用结构如:[p],其他的单个参数 p ,可以直接传入参数 p。
返回

此事件类型是否有侦听者,如果有侦听者则值为 true,否则值为 false。

on

on(type : string, caller : any, listener : Function, args? : Array): ClientScene :

使用场景注册指定类型的事件侦听器对象,以使侦听器能够接收事件通知

参数
type        事件的类型。
caller  事件侦听函数的执行域。a
listener    事件侦听函数。
args        [可选] 默认值=null 事件侦听函数的回调参数。
返回

此场景对象。

once

once(type : string, caller : any, listener : Function, args? : Array): ClientScene :

使用场景注册指定类型的事件侦听器对象,以使侦听器能够接收事件通知,此侦听事件响应一次后自动移除

参数
type        事件的类型。
caller  事件侦听函数的执行域。
listener    事件侦听函数。
args        [可选] 默认值=null 事件侦听函数的回调参数。
返回

此场景对象。

off

off(type : string, caller : any, listener : Function, onceOnly? : boolean): ClientScene :

从场景中删除侦听器

参数
type        事件的类型。
caller  事件侦听函数的执行域。
listener    事件侦听函数。
onceOnly    [可选] 默认值=false 如果值为 true ,则只移除通过 once 方法添加的侦听器。
返回

此场景对象。

offAll

offAll(type? : string): ClientScene :

从场景中删除指定事件类型的所有侦听器

参数
type    [可选] 默认值=null 事件类型,如果值为 null,则移除本对象所有类型的侦听器。
返回

此场景对象。

onRender

onRender(): void :

渲染:当Game.pause时则不处理刷新(update)
支持子类重写该方法以便编写专有的游戏逻辑
当前方法功能:
-- 刷新镜头
-- 刷新图层
-- 刷新场景对象(update)


Copyright © 2021 - 2025