Я новичок в 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);
}
}