测试换图内存无限上涨.zip (27.1 KB)
做成示例了
update(deltaTime: number) {
if (this.isStop) {
return
}
for (let i = 0; i < 100; i++) {
if (this.cacheImgAsset) {
this.getComponent(cc.Sprite).getComponent(cc.Sprite).spriteFrame = cc.SpriteFrame.createWithImage(this.cacheImgAsset);
}
else {
resources.load("testImage" + 1, ImageAsset, (err, asset) => {
if (!this.cacheImgAsset) {
this.cacheImgAsset = asset;
}
this.getComponent(cc.Sprite).getComponent(cc.Sprite).spriteFrame = cc.SpriteFrame.createWithImage(this.cacheImgAsset);
});
}
}
}
这么修改也不行,看来就是new Texture的时候上次的图没清掉,又因为再update中换图,又因为destroy是延迟卸载导致无法卸载,直到update停了才会自动卸载?
import { _decorator, Component, Node, resources, ImageAsset } from ‘cc’;
import * as cc from ‘cc’;
const { ccclass, property } = _decorator;@ccclass(‘changeImageTest’)
export class changeImageTest extends Component {
cacheImgAsset: cc.SpriteFrame
isStop = false;
start() {cc.input.on(cc.Input.EventType.KEY_DOWN, (event: cc.EventKeyboard) => { switch (event.keyCode) { case cc.KeyCode.KEY_A: this.isStop = true; break; default: this.isStop = false; break; } }, this); } update(deltaTime: number) { if (this.isStop) { return } for (let i = 0; i < 100; i++) { if (this.cacheImgAsset) { this.getComponent(cc.Sprite).getComponent(cc.Sprite).spriteFrame = this.cacheImgAsset; } else { resources.load("testImage" + 1, ImageAsset, (err, asset) => { if (!this.cacheImgAsset) { this.cacheImgAsset = cc.SpriteFrame.createWithImage(asset); } this.getComponent(cc.Sprite).getComponent(cc.Sprite).spriteFrame = this.cacheImgAsset; }); } } }}
这样缓存似乎可以了
有点锉呀,每次图片都要缓存一下spriteframe,不知道其他资源也要这样操作吗,其实换图把上个卸了就行了,自己做还要考虑热更重置问题还有自带■■回收内存太大给自动回收的问题,算了先这样吧 