javascript - 如何在不定义类的情况下创建多个实例?
问题描述
所以,我正在 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 个项目符号的一部分,但是一旦解决了这个中心问题,就可以解决。
解决方案
如果我了解您的情况,您可以使用返回新类的函数:
function bulletFactory( className ) {
return new className();
}
推荐阅读
- sql - Oracle SQL 组合多个查询的非重复结果
- r - 在函数-ggplot中将参数传递给构面网格
- optimization - pytorch中序数多分类的损失函数
- javascript - Asp.Net 显示与 $ajax 一起使用的默认错误页面
- airflow - 如何获得上一份工作的结束时间
- kubernetes - 错误:(gcloud.compute.instance-templates.create)无法获取图像资源:
- php - 在找不到记录时插入数据,否则使用 PHP Mysql 使用最后插入的 ID 更新上一条记录
- kotlin - 是否可以对网络中的其他节点隐藏某些 corda 节点?
- postgresql - 无法远程连接到 Postgres 服务器
- opencl - OpenCL上的差异时间计算浮动和双倍?