demo 更新
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -316,6 +316,13 @@ module es {
|
||||
this.components.update();
|
||||
}
|
||||
|
||||
/**
|
||||
* 在默认渲染器中,如果Core.debugRenderEnabled为true,则调用。自定义渲染器可以选择是否调用它。
|
||||
*/
|
||||
public debugRender(){
|
||||
this.components.debugRender();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将组件添加到组件列表中。返回组件。
|
||||
* @param component
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,11 @@ module es {
|
||||
* @param camera
|
||||
*/
|
||||
render(camera: Camera);
|
||||
|
||||
/**
|
||||
* 只有在没有碰撞器时才呈现边界。总是在原点上渲染一个正方形。
|
||||
*/
|
||||
debugRender();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
40
source/src/Graphics/Renderers/RenderLayerExcludeRenderer.ts
Normal file
40
source/src/Graphics/Renderers/RenderLayerExcludeRenderer.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user