JavaScript работает только тогда, когда файл класса содержит круглые скобки в имени - PullRequest
0 голосов
/ 05 апреля 2019

Я новичок в JavaScript и хотел написать игру, которую я ранее программировал на Java.Я программировал с помощью библиотеки p5.js и использовал текстовый редактор Atom.Игра, которую я делал, была Астероиды, и она работала нормально.Я разобрался, как добавить корабль и лазеры.Затем я добавил код для настоящих астероидов.(Я не уверен, является ли это уместным или нет, но, как я уже говорил, я копировал код из проекта Java, и когда я пошел, чтобы добавить астероиды, я в основном скопировал все это, не сохраняя его доготово.) После того как я их добавил, я попытался запустить его и сказал «астероид не определен», потому что я забыл добавить ссылку на него в HTML.Однако после того, как я запустил его снова, страница перестала загружаться и, в конце концов, вылетала (я получил ошибку «Aw, Snap! Что-то пошло не так при отображении этой веб-страницы»).Сначала я подумал, что это HTML, но когда я добавил класс в основной сценарий, он все равно завис.Через час я понял, что если я добавлю скобки к имени класса (class ship () {}), то страница загрузится.Тем не менее, я получил бы синтаксическую ошибку, как и ожидалось.То же самое произошло бы, если бы я объявил объект как класс, как вы сделали бы в Java (Ship ship;), он запустился бы, но он сказал бы «Uncaught SyntaxError: Неожиданный идентификатор».Я не уверен, как обойти это, или почему не добавление круглых скобок к имени класса приведет к тому, что программа не запустится.

Прилагаются первая часть моего основного сценария, конструктор класса моего корабля и мой класс астероидов, потому что проблемы начались только после его добавления.

Любая помощь или решения этой проблемы будутс благодарностью.

Основной сценарий:

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);
  }
}

1 Ответ

0 голосов
/ 05 апреля 2019

Запустив код, я получил ту же ошибку.Оказывается, у вашего 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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...