javascript - JavaScript 仅在类文件名称中包含括号时运行
问题描述
我是 JavaScript 新手,想编写一个我以前用 Java 编写过的游戏。我正在使用 p5.js 库进行编码,并使用 Atom 文本编辑器。我正在制作的游戏是 Asteroids,它运行良好。我已经想出了如何添加船和激光。然后我添加了实际小行星的代码。(我不确定这是否相关,但正如我之前所说,我正在从 Java 项目中复制代码,当我去添加小行星时,我基本上复制了整个内容,直到我完成。)添加它们后,我尝试运行它,我说“未定义小行星”,因为我忘记在 HTML 中添加对它的引用。但是,在我再次运行它之后,页面停止加载并最终崩溃(我收到“Aw,Snap!显示此网页时出现问题”错误)。一开始我以为是HTML,但是当我将类添加到主脚本时,它仍然崩溃。一个小时后,我意识到如果我在类名中添加括号(class ship(){}),那么页面就会加载。但是,我会按预期得到一个语法错误。如果我像在 Java 中那样将对象声明为类(Ship ship;),也会发生同样的事情,它会运行但会显示“Uncaught SyntaxError: Unexpected identifier”。我不确定如何解决这个问题,或者为什么不在类名中添加括号会导致程序无法运行。如果我像在 Java 中那样将对象声明为类(Ship ship;),也会发生同样的事情,它会运行但会显示“Uncaught SyntaxError: Unexpected identifier”。我不确定如何解决这个问题,或者为什么不在类名中添加括号会导致程序无法运行。如果我像在 Java 中那样将对象声明为类(Ship ship;),也会发生同样的事情,它会运行但会显示“Uncaught SyntaxError: Unexpected identifier”。我不确定如何解决这个问题,或者为什么不在类名中添加括号会导致程序无法运行。
附件是我的主脚本的第一部分,我的船类的构造函数和我的小行星类,因为问题只是在添加后才开始。
对此问题的任何帮助或解决方案将不胜感激。
主脚本:
let ship;
let bullets = [];
let asteroids = [];
// Left Right Boost Slow Shoot
let keyDown = [false, false, false, false, false];
function setup(){
window.canvas = createCanvas(800, 600);
ship = new Ship(width/2, height/2);
for(let i = 0; i = 4; i++){
asteroids.push(new asteroid(random(width), random(height), 100));
}
frameRate(60);
}
function draw(){
background(0);
checkKeys();
ship.update();
ship.show();
for(let i = bullets.length-1; i >= 0; i--){
bullets[i].update();
bullets[i].show();
if(!bullets[i].alive){
bullets.splice(i, 1);
}
}
for(let i = asteroids.length-1; i >= 0; i--){
asteroids[i].update();
asteroids[i].show();
}
}
船级:
class Ship{
constructor(x, y){
this.x = x;
this.y = y;
this.velX = 0;
this.velY = 0;
this.midX = this.x + 15;
this.midY = this.y + 20;
this.heading = 0;
this.rotation = 0;
this.boosting = false;
}
小行星类:
class asteroid{
constructor(x, y, size){
this.x = x;
this.y = y;
this.size = size;
this.velX = random(-2, 3);
this.velY = random(-2, 3);
if(this.velX == 0){
this.velX++;
}
if(this.velY == 0){
this.velY++;
}
this.points = random(4, 12);
this.xPoints = [];
this.yPoints = [];
this.offsets = [];
for(let i = 0; i < this.points; i++){
this.offsets[i] = random(-size/5, (size/5)+1);
}
}
update(){
this.x += this.velX;
this.y += this.velY;
}
show(){
stroke(255);
beginShape();
for(let i; i < this.points; i++){
let angle = i*(360/this.points);
let px = (this.size/2 + this.offsets[i]) * cos(angle);
let py = (this.size/2 + this.offsets[i]) * sin(angle);
this.xPoints[i] = px + this.x;
this.yPoints[i] = py + this.y;
vertex(px, py);
}
endShape(CLOSE);
}
}
解决方案
运行代码,我得到了同样的错误。原来你的ship
类没有类的右括号}
,只有构造函数。添加它,现在我没有错误
let ship;
let bullets = [];
let asteroids = [];
// Left Right Boost Slow Shoot
let keyDown = [false, false, false, false, false];
function setup(){
window.canvas = createCanvas(800, 600);
ship = new Ship(width/2, height/2);
for(let i = 0; i = 4; i++){
asteroids.push(new asteroid(random(width), random(height), 100));
}
frameRate(60);
}
function draw(){
background(0);
checkKeys();
ship.update();
ship.show();
for(let i = bullets.length-1; i >= 0; i--){
bullets[i].update();
bullets[i].show();
if(!bullets[i].alive){
bullets.splice(i, 1);
}
}
for(let i = asteroids.length-1; i >= 0; i--){
asteroids[i].update();
asteroids[i].show();
}
}
class Ship{
constructor(x, y){
this.x = x;
this.y = y;
this.velX = 0;
this.velY = 0;
this.midX = this.x + 15;
this.midY = this.y + 20;
this.heading = 0;
this.rotation = 0;
this.boosting = false;
}
} //<--- I added this bracket
class asteroid{
constructor(x, y, size){
this.x = x;
this.y = y;
this.size = size;
this.velX = random(-2, 3);
this.velY = random(-2, 3);
if(this.velX == 0){
this.velX++;
}
if(this.velY == 0){
this.velY++;
}
this.points = random(4, 12);
this.xPoints = [];
this.yPoints = [];
this.offsets = [];
for(let i = 0; i < this.points; i++){
this.offsets[i] = random(-size/5, (size/5)+1);
}
}
update(){
this.x += this.velX;
this.y += this.velY;
}
show(){
stroke(255);
beginShape();
for(let i; i < this.points; i++){
let angle = i*(360/this.points);
let px = (this.size/2 + this.offsets[i]) * cos(angle);
let py = (this.size/2 + this.offsets[i]) * sin(angle);
this.xPoints[i] = px + this.x;
this.yPoints[i] = py + this.y;
vertex(px, py);
}
endShape(CLOSE);
}
}
推荐阅读
- python - 用循环显示两对单词
- php - 在单个布局中加载多个部分时出现@yield 和 @section 问题
- node.js - 没有破坏 setTimeOut 的 axios 连接错误
- javascript - 如何使用 JavaSript 在 HTML 中创建分级量表?
- python - 如何定义 Matsum 命令或导致什么错误?
- php - 关系和嵌套数据 eloquent 和 laravel
- javascript - 对象数组上的属性乘积之和
- android - 将值保存到共享首选项后应用程序崩溃
- plot - 需要计算Netlogo中4个品种的海龟数量
- r - 带有闪亮的交互式传单 - clearMarkers() 并设置新的传单