mirror of
https://github.com/unanmed/HumanBreak.git
synced 2026-11-12 17:04:31 +08:00
fix: 画布内存泄漏
This commit is contained in:
1 parent
351ede3996
commit
65855d1a64
13 files changed
+50
-30
No files matched your search
@@ -1,9 +1,10 @@
|
||||
import { EventEmitter } from 'eventemitter3';
|
||||
import { logger } from '@motajs/common';
|
||||
import { MotaOffscreenCanvas2D } from '@motajs/render-core';
|
||||
import { MotaOffscreenCanvas2D, RenderItem } from '@motajs/render-core';
|
||||
|
||||
interface BlockCacherEvent {
|
||||
split: [];
|
||||
beforeClear: [index: number];
|
||||
}
|
||||
|
||||
interface BlockData {
|
||||
@@ -307,9 +308,12 @@ export interface ICanvasCacheItem extends IBlockCacheable {
|
||||
|
||||
export class CanvasCacheItem implements ICanvasCacheItem {
|
||||
constructor(
|
||||
public canvas: MotaOffscreenCanvas2D,
|
||||
public symbol: number
|
||||
public readonly canvas: MotaOffscreenCanvas2D,
|
||||
public readonly symbol: number,
|
||||
public readonly element: RenderItem
|
||||
) {}
|
||||
|
||||
destroy(): void {}
|
||||
destroy(): void {
|
||||
this.element.deleteCanvas(this.canvas);
|
||||
}
|
||||
}
|
||||
@@ -539,7 +539,7 @@ export class Damage extends RenderItem<EDamageEvent> {
|
||||
});
|
||||
|
||||
ctx.drawImage(temp.canvas, px, py, size, size);
|
||||
block.cache.set(v, new CanvasCacheItem(temp, temp.symbol));
|
||||
block.cache.set(v, new CanvasCacheItem(temp, temp.symbol, this));
|
||||
});
|
||||
ctx.restore();
|
||||
// console.timeEnd('damage');
|
||||
|
||||
@@ -774,6 +774,7 @@ export class Layer extends Container<ELayerEvent> {
|
||||
const num = this.background;
|
||||
|
||||
const data = texture.getRenderable(num);
|
||||
this.backImage.forEach(v => this.deleteCanvas(v));
|
||||
this.backImage = [];
|
||||
if (!data) return;
|
||||
|
||||
@@ -800,6 +801,7 @@ export class Layer extends Container<ELayerEvent> {
|
||||
|
||||
this.backImage.push(canvas);
|
||||
}
|
||||
this.deleteCanvas(temp);
|
||||
|
||||
for (const ex of this.extend.values()) {
|
||||
ex.onBackgroundGenerated?.(this, this.backImage);
|
||||
@@ -1239,7 +1241,10 @@ export class Layer extends Container<ELayerEvent> {
|
||||
blockSize * cell,
|
||||
blockSize * cell
|
||||
);
|
||||
this.block.cache.set(index, new CanvasCacheItem(temp, temp.symbol));
|
||||
this.block.cache.set(
|
||||
index,
|
||||
new CanvasCacheItem(temp, temp.symbol, this)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -211,6 +211,7 @@ export class Winskin extends RenderItem<EWinskinEvent> {
|
||||
Winskin.patternMap.set(this.imageName, winskinPattern);
|
||||
}
|
||||
this.patternCache = winskinPattern;
|
||||
this.deleteCanvas(pattern);
|
||||
return winskinPattern;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user