demo 更新

This commit is contained in:
yhh
2020-08-21 19:21:40 +08:00
parent 6d4d787530
commit 646d1806ec
144 changed files with 51196 additions and 2531 deletions

View File

@@ -116,6 +116,9 @@ module es {
* @param camera
*/
public isVisibleFromCamera(camera: Camera): boolean {
if (!camera)
return false;
this.isVisible = camera.bounds.intersects(this.displayObject.getBounds().union(this.bounds));
return this.isVisible;
}

View File

@@ -316,6 +316,13 @@ module es {
this.components.update();
}
/**
* 在默认渲染器中如果Core.debugRenderEnabled为true则调用。自定义渲染器可以选择是否调用它。
*/
public debugRender(){
this.components.debugRender();
}
/**
* 将组件添加到组件列表中。返回组件。
* @param component

View File

@@ -267,5 +267,12 @@ module es {
for (let i = 0; i < this._components.length; i++)
this._components[i].onDisabled();
}
public debugRender(){
for (let i = 0; i < this._components.length; i ++){
if (this._components[i].enabled)
this._components[i].debugRender();
}
}
}
}

View File

@@ -34,6 +34,11 @@ module es {
* @param camera
*/
render(camera: Camera);
/**
* 只有在没有碰撞器时才呈现边界。总是在原点上渲染一个正方形。
*/
debugRender();
}
/**

View File

@@ -0,0 +1,40 @@
module es {
/**
* 除了一个渲染层,只渲染所有的渲染器。
* 当与RenderLayerRenderer一起使用时将UI渲染与游戏的其他部分分离开来。
*/
export class RenderLayerExcludeRenderer extends Renderer {
public excludedRenderLayers: number[];
constructor(renderOrder: number, ...excludedRenderLayers: number[]){
super(renderOrder, null);
this.excludedRenderLayers = excludedRenderLayers;
}
public render(scene: es.Scene) {
let cam = this.camera ? this.camera : scene.camera;
this.beginRender(cam);
for (let i = 0; i < scene.renderableComponents.count; i ++) {
let renderable = scene.renderableComponents.buffer[i];
if (!this.excludedRenderLayers.contains(renderable.renderLayer) && renderable.enabled &&
renderable.isVisibleFromCamera(cam))
this.renderAfterStateCheck(renderable, cam);
}
if (this.shouldDebugRender && Core.debugRenderEndabled)
this.debugRender(scene, cam);
}
protected debugRender(scene: es.Scene, cam: es.Camera) {
for (let i = 0; i < scene.renderableComponents.count; i ++){
let renderable = scene.renderableComponents.buffer[i];
if (!this.excludedRenderLayers.contains(renderable.renderLayer) && renderable.enabled &&
renderable.isVisibleFromCamera(cam))
renderable.debugRender();
}
super.debugRender(scene, cam);
}
}
}

View File

@@ -13,6 +13,23 @@ module es {
* 指定场景调用渲染器的顺序
*/
public readonly renderOrder: number = 0;
/**
* 如果renderTarget不是null这个渲染器将渲染到渲染目标而不是屏幕
*/
public renderTexture: egret.RenderTexture;
/**
* 这个渲染器的标志,决定它是否应该调试渲染。
* render方法接收一个bool (debugRenderEnabled),让渲染器知道全局调试渲染是否打开/关闭。
* 渲染器然后使用本地bool来决定它是否应该调试渲染。
*/
public shouldDebugRender: boolean = true;
/**
* 如果为true场景将使用场景渲染目标调用setRenderTarget。
* 如果渲染器有渲染纹理默认实现返回true
*/
public get wantsToRenderToSceneRenderTarget(): boolean{
return !!this.renderTexture;
}
protected constructor(renderOrder: number, camera: Camera = null) {
this.camera = camera;
@@ -62,5 +79,18 @@ module es {
protected renderAfterStateCheck(renderable: IRenderable, cam: Camera) {
renderable.render(cam);
}
/**
* 默认debugRender方法只循环遍历所有实体并调用entity.debugRender
* @param scene
* @param cam
*/
protected debugRender(scene: Scene, cam: Camera){
for (let i = 0; i < scene.entities.count; i ++){
let entity = scene.entities.buffer[i];
if (entity.enabled)
entity.debugRender();
}
}
}
}

View File

@@ -3,7 +3,47 @@ module es {
* 渲染器使用自己的不移动的摄像机进行渲染。
*/
export class ScreenSpaceRenderer extends Renderer {
public renderLayers: number[];
constructor(renderOrder: number, ...renderLayers: number[]){
super(renderOrder, null);
renderLayers.sort();
renderLayers.reverse();
this.renderLayers = renderLayers;
}
public render(scene: Scene) {
this.beginRender(this.camera);
for (let i = 0; i < this.renderLayers.length; i ++){
let renderables = scene.renderableComponents.componentsWithRenderLayer(this.renderLayers[i]);
for (let j = 0; j < renderables.length; j ++){
let renderable = renderables[j];
if (renderable.enabled && renderable.isVisibleFromCamera(this.camera))
this.renderAfterStateCheck(renderable, this.camera);
}
}
if (this.shouldDebugRender && Core.debugRenderEndabled)
this.debugRender(scene, this.camera);
}
protected debugRender(scene: es.Scene, cam: es.Camera) {
for (let i = 0; i < this.renderLayers.length; i ++){
let renderables = scene.renderableComponents.componentsWithRenderLayer(this.renderLayers[i]);
for (let j = 0; j < renderables.length; j ++){
let entity = renderables[j];
if (entity.enabled)
entity.debugRender();
}
}
}
public onSceneBackBufferSizeChanged(newWidth: number, newHeight: number) {
super.onSceneBackBufferSizeChanged(newWidth, newHeight);
if (!this.camera)
this.camera = Core.scene.createEntity("screenspace camera").addComponent(new Camera());
}
}
}

View File

@@ -1,5 +1,5 @@
module es {
import Bitmap = egret.Bitmap;
export class TiledMapLoader {
public static loadTmxMap(map: TmxMap, filePath: string) {
@@ -266,18 +266,16 @@ module es {
// firstgid总是在TMX中而不是在TSX中
let xFirstGid = xTileset["firstgid"];
let firstGid = xFirstGid;
let source = xTileset["image"];
let source = xTileset["source"];
// 如果是嵌入式TmxTileset即不是外部的source将为null
if (source != undefined) {
source = map.tmxDirectory + source;
// 其他所有内容都在TSX文件中
let xDocTileset = await RES.getResByUrl(source, null, this, RES.ResourceItem.TYPE_IMAGE).catch(err => {
let xDocTileset = await RES.getResByUrl(source).catch(err => {
throw new Error(err);
});
let tileset = this.loadTmxTileset(new TmxTileset(), map, xDocTileset["tileset"], firstGid);
return tileset;
return this.loadTmxTileset(new TmxTileset(), map, xDocTileset["tileset"], firstGid);
}
return this.loadTmxTileset(new TmxTileset(), map, xTileset, firstGid);
@@ -299,7 +297,9 @@ module es {
let xImage = xTileset["image"];
if (xImage)
tileset.image = await this.loadTmxImage(new TmxImage(), xTileset, map.tmxDirectory).catch(err => {
await this.loadTmxImage(new TmxImage(), xTileset, map.tmxDirectory).then(image => {
tileset.image = image;
}).catch(err => {
throw new Error(err);
});