新增场景截图 requestScreenshot

This commit is contained in:
yhh
2020-08-12 19:57:06 +08:00
parent c89ed25d8a
commit 4012a9f6d1
7 changed files with 49 additions and 9 deletions

View File

@@ -348,6 +348,7 @@ declare module es {
readonly entities: EntityList;
readonly renderableComponents: RenderableComponentList;
readonly entityProcessors: EntityProcessorList;
_screenshotRequestCallback: Function;
readonly _sceneComponents: SceneComponent[];
_renderers: Renderer[];
readonly _postProcessors: PostProcessor[];
@@ -364,6 +365,7 @@ declare module es {
update(): void;
render(): void;
postRender(): void;
requestScreenshot(callback: Function): void;
addSceneComponent<T extends SceneComponent>(component: T): T;
getSceneComponent<T extends SceneComponent>(type: any): T;
getOrCreateSceneComponent<T extends SceneComponent>(type: any): T;

View File

@@ -1719,6 +1719,15 @@ var es;
}
}
}
if (this._screenshotRequestCallback) {
var tex = new egret.RenderTexture();
tex.drawToTexture(this, new es.Rectangle(0, 0, this.stage.stageWidth, this.stage.stageHeight));
this._screenshotRequestCallback(tex);
this._screenshotRequestCallback = null;
}
};
Scene.prototype.requestScreenshot = function (callback) {
this._screenshotRequestCallback = callback;
};
Scene.prototype.addSceneComponent = function (component) {
component.scene = this;

File diff suppressed because one or more lines are too long

View File

@@ -27,6 +27,8 @@ module es {
*/
public readonly entityProcessors: EntityProcessorList;
public _screenshotRequestCallback: Function;
public readonly _sceneComponents: SceneComponent[] = [];
public _renderers: Renderer[] = [];
public readonly _postProcessors: PostProcessor[] = [];
@@ -121,7 +123,7 @@ module es {
this.entities.removeAllEntities();
this.removeChildren();
for (let i = 0; i < this._sceneComponents.length; i ++){
for (let i = 0; i < this._sceneComponents.length; i++) {
this._sceneComponents[i].onRemovedFromScene();
}
this._sceneComponents.length = 0;
@@ -142,7 +144,7 @@ module es {
// 更新我们的列表,以防它们有任何变化
this.entities.updateLists();
for (let i = this._sceneComponents.length - 1; i >= 0; i --){
for (let i = this._sceneComponents.length - 1; i >= 0; i--) {
if (this._sceneComponents[i].enabled)
this._sceneComponents[i].update();
}
@@ -184,6 +186,22 @@ module es {
}
}
}
// 如果我们有一个屏幕截图请求处理它之前最后渲染到backbuffer
if (this._screenshotRequestCallback){
let tex = new egret.RenderTexture();
tex.drawToTexture(this, new Rectangle(0, 0, this.stage.stageWidth, this.stage.stageHeight));
this._screenshotRequestCallback(tex);
this._screenshotRequestCallback = null;
}
}
/**
* 在下一次绘制完成后,会进行场景全屏截图
* @param callback
*/
public requestScreenshot(callback: Function){
this._screenshotRequestCallback = callback;
}
/**
@@ -202,8 +220,8 @@ module es {
* 获取类型为T的第一个SceneComponent并返回它。如果没有找到组件则返回null。
* @param type
*/
public getSceneComponent<T extends SceneComponent>(type){
for (let i = 0; i < this._sceneComponents.length; i ++){
public getSceneComponent<T extends SceneComponent>(type) {
for (let i = 0; i < this._sceneComponents.length; i++) {
let component = this._sceneComponents[i];
if (component instanceof type)
return component as T;
@@ -216,7 +234,7 @@ module es {
* 获取类型为T的第一个SceneComponent并返回它。如果没有找到SceneComponent则将创建SceneComponent。
* @param type
*/
public getOrCreateSceneComponent<T extends SceneComponent>(type){
public getOrCreateSceneComponent<T extends SceneComponent>(type) {
let comp = this.getSceneComponent<T>(type);
if (comp == null)
comp = this.addSceneComponent<T>(new type());
@@ -228,8 +246,8 @@ module es {
* 从SceneComponents列表中删除一个SceneComponent
* @param component
*/
public removeSceneComponent(component: SceneComponent){
if (!this._sceneComponents.contains(component)){
public removeSceneComponent(component: SceneComponent) {
if (!this._sceneComponents.contains(component)) {
console.warn(`SceneComponent${component}不在SceneComponents列表中!`);
return;
}