首页 > 解决方案 > 如何在不定义类的情况下创建多个实例?

问题描述

所以,我正在 HTML5 画布上制作游戏。这是一个自上而下的射击游戏,每次点击让角色射击时,我都需要创建一个子弹。

最初,我只是阻止玩家发射另一颗子弹,直到它超出边界或击中敌人,如图所示。这很有效,但当然,这会使游戏变得无趣。

然后,我开始研究JS类,我认为这将是问题的关键。我创建了一个子弹类,并将子弹的所有逻辑移至该类。然后,我创建了它的一个实例,并在代码的其他部分调用它来执行它的逻辑。这和以前完全一样,这很好,因为这意味着我可以将以前的东西翻译成课程,但它也有类似的问题。

这是类的定义方式:

class bullet{

    constructor(_img, _piercing){

        this.bulletPic = document.createElement("img");
        this.img = this.bulletPic.src = _img;
        this.piercing = _piercing;
    }

    shoot(){
        this.bulletAngle = playerAngle;
        this.bulletX = playerX;
        this.bulletY = playerY;
        bulletShot = true;
        shots = 0;
    }

    draw(){
        canvasContext.save();
        canvasContext.translate(this.bulletX, this.bulletY);
        canvasContext.rotate(this.bulletAngle);
        canvasContext.drawImage(this.bulletPic, -this.bulletPic.width / 2, -this.bulletPic.height / 2);
        canvasContext.restore();

        if(bulletShot){
            this.bulletX += Math.sin(this.bulletAngle) * BULLET_SPEED;
            this.bulletY -= Math.cos(this.bulletAngle) * BULLET_SPEED;
        }

    }
}

这是对象定义:

let bullet1 = new bullet("Textures/player.png", true);

如果我想同时射击另一个子弹,我需要已经定义了一个子弹类的新实例,有什么方法可以让我每次点击都定义一个新实例?

编辑:在另一个文件中调用了拍摄和绘制方法,该文件遵循此处未显示的逻辑。主要是这个其他代码的作用是检测它何时击中敌人或何时越界将“bulletShot”设置为false,使其“消失”,我可以发射另一颗子弹。这是我试图在此处删除的时间限制中的 1 个项目符号的一部分,但是一旦解决了这个中心问题,就可以解决。

标签: javascript

解决方案


如果我了解您的情况,您可以使用返回新类的函数:

function bulletFactory( className ) {
    return new className();
}

推荐阅读