Можно ли сбросить World.frameCount в Code.org JS (Game Lab)? - PullRequest
0 голосов
/ 14 июля 2020

Это вопрос к игре, над которой я работаю в Game Lab на Code.org. Рассматриваемая игра будет похожа на игру с парашютом, в которой препятствия появляются через случайные интервалы (от 1000 до 3000 мс). Вот код:

World.frameRate = 10;
var rects = createGroup();
var timeout = Math.round(randomNumber(800, 3000) / 100) * 100;

function draw() {
  background("white");
  drawSprites();
  if (World.frameCount === Math.round(randomNumber(1000, 3000) / 100) * 100) {
    World.frameCount = 0;
    creation();
  }
}

function creation() {
  var obstacle = createSprite(randomNumber(100, 300), 200, 50, 20);
  obstacle.velocityY = -2;
}
/*
setInterval(function() {
  creation();
}, Math.round(randomNumber(800,3000)/100)*100);
*/

Чтобы создать механизм порождения, я попытался использовать функции setInterval() и setTimeout(), но с этими двумя при первом выполнении он создает случайный number и оттуда продолжает порождать объекты с тем же интервалом. Я не мог найти обходных путей, поэтому перешел на World.frameCount. Эта концепция работает, однако из-за оператора === препятствия будут появляться только между 1 и 3 секундами, через 3 секунды объекты не смогут появляться. Чтобы исправить это, я добавил в строку 9 (World.frameCount = 0;). При запуске возникает ошибка:

ERROR: Line: 9: TypeError: Cannot set property frameCount of #<Object> which has only a getter

Я понимаю, что эта ошибка вызвана тем, что вы не можете изменить значение World.frameCount. Есть ли какие-то обходные пути? Я также был бы признателен за любые предложения относительно других способов сделать это.

Вот ссылка на проект Code.org: Skydive v1.0

1 Ответ

1 голос
/ 14 июля 2020

Не думаю, что вы хотите устанавливать World.frameCount. Если вы хотите создавать объекты с переменным интервалом, используйте это:

(function timeoutHandler() {
  creation();
  setTimeout(timeoutHandler, randomNumber(800,3000)/100)*100);
})();
...