完善渐隐场景转换
This commit is contained in:
@@ -82,4 +82,9 @@ class SpriteRenderer extends RenderableComponent {
|
||||
this._bitmap.scaleX = this.entity.transform.scale.x * camera.transform.scale.x;
|
||||
this._bitmap.scaleY = this.entity.transform.scale.y * camera.transform.scale.y;
|
||||
}
|
||||
|
||||
public onRemovedFromEntity(){
|
||||
if (this._bitmap)
|
||||
this.stage.removeChild(this._bitmap);
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ class Entity {
|
||||
public readonly components: ComponentList;
|
||||
private _updateOrder: number = 0;
|
||||
private _enabled: boolean = true;
|
||||
private _isDestoryed: boolean;
|
||||
public _isDestoryed: boolean;
|
||||
private _tag: number = 0;
|
||||
|
||||
public componentBits: BitSet;
|
||||
@@ -253,7 +253,7 @@ class Entity {
|
||||
|
||||
public onRemovedFromScene(){
|
||||
if (this._isDestoryed)
|
||||
this.components.remove
|
||||
this.components.removeAllComponents();
|
||||
}
|
||||
|
||||
public onTransformChanged(comp: ComponentTransform){
|
||||
|
||||
@@ -117,6 +117,9 @@ class Scene extends egret.DisplayObjectContainer {
|
||||
this.removeEventListener(egret.Event.DEACTIVATE, this.onDeactive, this);
|
||||
this.removeEventListener(egret.Event.ACTIVATE, this.onActive, this);
|
||||
|
||||
for (let i = 0; i < this._renderers.length; i ++){
|
||||
this._renderers[i].unload();
|
||||
}
|
||||
this.entities.removeAllEntities();
|
||||
|
||||
Physics.clear();
|
||||
@@ -127,6 +130,8 @@ class Scene extends egret.DisplayObjectContainer {
|
||||
|
||||
if (this.entityProcessors)
|
||||
this.entityProcessors.end();
|
||||
|
||||
this.unload();
|
||||
}
|
||||
|
||||
protected onStart(){
|
||||
@@ -143,6 +148,8 @@ class Scene extends egret.DisplayObjectContainer {
|
||||
|
||||
}
|
||||
|
||||
protected unload(){ }
|
||||
|
||||
public update() {
|
||||
this.entities.updateLists();
|
||||
|
||||
|
||||
@@ -3,10 +3,12 @@ class SceneManager {
|
||||
private static _scene: Scene;
|
||||
private static _nextScene: Scene;
|
||||
public static sceneTransition: SceneTransition;
|
||||
public static stage: egret.Stage;
|
||||
|
||||
constructor(stage: egret.Stage) {
|
||||
stage.addEventListener(egret.Event.ENTER_FRAME, SceneManager.update, this);
|
||||
|
||||
SceneManager.stage = stage;
|
||||
SceneManager.initialize(stage);
|
||||
}
|
||||
|
||||
@@ -62,18 +64,19 @@ class SceneManager {
|
||||
}
|
||||
|
||||
public static render() {
|
||||
if (this.sceneTransition)
|
||||
if (this.sceneTransition){
|
||||
this.sceneTransition.preRender();
|
||||
|
||||
if (this.sceneTransition) {
|
||||
if (this._scene && this.sceneTransition.wantsPreviousSceneRender && !this.sceneTransition.hasPreviousSceneRender) {
|
||||
this._scene.render();
|
||||
if (this._scene && !this.sceneTransition.hasPreviousSceneRender){
|
||||
this.scene.render();
|
||||
this.sceneTransition.onBeginTransition();
|
||||
} else if (this._scene && this.sceneTransition.isNewSceneLoaded) {
|
||||
this._scene.render();
|
||||
} else if (this.sceneTransition) {
|
||||
if (this._scene && this.sceneTransition.isNewSceneLoaded) {
|
||||
this._scene.render();
|
||||
}
|
||||
|
||||
this.sceneTransition.render();
|
||||
}
|
||||
|
||||
this.sceneTransition.render();
|
||||
} else if (this.scene) {
|
||||
this.scene.render();
|
||||
}
|
||||
@@ -84,7 +87,7 @@ class SceneManager {
|
||||
* @param sceneTransition
|
||||
*/
|
||||
public static startSceneTransition<T extends SceneTransition>(sceneTransition: T): T {
|
||||
if (!this.sceneTransition) {
|
||||
if (this.sceneTransition) {
|
||||
throw new Error("在前一个场景完成之前,不能开始一个新的场景转换。");
|
||||
}
|
||||
|
||||
|
||||
@@ -82,6 +82,8 @@ class EntityList{
|
||||
this.updateLists();
|
||||
|
||||
for (let i = 0; i < this._entities.length; i ++){
|
||||
this._entities[i]._isDestoryed = true;
|
||||
this._entities[i].onRemovedFromScene();
|
||||
this._entities[i].scene = null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user