cocos3.4.2飞机大战resources.load飞机爆炸动画后销毁出错

  • Creator 版本: 3.4.2

  • 目标平台: Chrome

  • 重现方式:
    import { _decorator, Component, Node, RigidBody, PhysicsSystem2D, RigidBody2D, Collider, BoxCollider, BoxCollider2D, Collider2D, Contact2DType, loader, resources, Texture2D, Sprite, SpriteFrame, spriteAssembler, SpriteAtlas, sp } from ‘cc’;
    const { ccclass, property } = _decorator;

@ccclass(‘EnemyControl’)
export class EnemyControl extends Component {
@property
enemySpeed: number = 200;
@property
private enemyDieBoolean: boolean = false;

start () {
    // 碰撞监测
    let collider = this.getComponent(Collider2D);
    collider.once(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
    
}

update (deltaTime: number) {
    // 敌人移动 
    this.node.setPosition(this.node.position.x, this.node.position.y - this.enemySpeed * deltaTime);
    if (this.node.position.y < -900 || this.enemyDieBoolean == true) {
        this.node.setPosition(this.node.position.x, this.node.position.y);            
        this.enemyDie();
    }
}

// 碰撞检测
onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D) {
    if (otherCollider.tag == 1) {
        this.enemyDieBoolean = true;
    } else if (otherCollider.tag == 0) {
        this.enemyDieBoolean = true;
    }
}

// 死亡脚本
enemyDie() {
    // 载入爆炸图片
    resources.load('enemy0_die/spriteFrame', SpriteFrame, (err, sp) => {
        this.getComponent(Sprite).spriteFrame = sp;
    })
    // 300毫秒后销毁
    setTimeout(() => {
        this.node.destroy();
    }, 300);
}

}

  • 首个报错:“Uncaught TypeError: Cannot read properties of null (reading ‘destroy’)”

本人新手,刚接触Cocos3.x版本,请教大佬们一个简单的问题,卡了很久了,谢谢!

我依照飞羽大大的教程做了一个cocos3.x版本的打飞机小游戏,在子弹接触到敌机让其死亡的时候,先预加载敌机爆炸图片,然后300毫秒后让其销毁,但是总是报错,找不到destroy,考虑了异步加载的问题,因此也采用过promise, await的办法,但是仍然报这个错误,destroy找不到。

谢谢大家了!

enemyDie被执行多次
因为你碰撞后,并没用使其碰撞失效,会和其它的继续碰撞导致

我已经修改了代码,让其碰撞后设置值为false,或者直接不在update里面写,就不报错了,谢谢大佬!

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。