Что сделать с Вашими старыми [закрытыми] приложениями

Причину, по которой квадрат реагирует хаотично, можно найти в функции Game.update(). Так как вы добавляете слушателя в функцию, которая вызывается 60 раз в секунду, он добавляет этого слушателя каждый раз, поэтому позиция была изменена только на 1/1000 от действительного расстояния. Кажется, вы хотите, чтобы квадрат переехать. Это можно исправить, настроив прослушиватель событий только один раз, вне игрового цикла, так как он вызывается неоднократно.

Вот рабочий фрагмент с кодом из вашей скрипки (не уверен, что с этим не работает), где я полностью отбросил функцию Game.update() и поместил всю логику из этого в слушатель событий. Положение прямоугольника теперь будет устанавливаться только один раз при нажатии клавиши со стрелкой, хотя функция будет запускаться при каждом нажатии любой клавиши. Поскольку игровой цикл постоянно перерисовывает холст, изменения появляются каждый раз.

В качестве альтернативы, вы также можете визуализировать и нарисовать холст в прослушивателе событий (я написал их там и прокомментировал), вместо того, чтобы перестраивать его внутри рекурсивного setTimeout, но я не уверен, какая у вас другая игровая логика ищу реализацию, а может вам это нужно. Но в целях демонстрации попробуйте закомментировать вызов Game.mainLoop() внутри Game.start() и раскомментировать методы в нижней части слушателя keydown.

Надеюсь, это поможет вам.

var Game = {
  canvas: undefined,
  canvasContext: undefined,
  rectanglePositionX: 50,
  rectanglePositionY: 50,
};

Game.start = function() {
  Game.canvas = document.getElementById("myCanvas");
  Game.canvasContext = Game.canvas.getContext("2d");
  // comment this out to instead invoke the clearCanvas and draw methods inside the listener:
  Game.mainLoop();
};

Game.clearCanvas = function() {
  Game.canvasContext.clearRect(0, 0, Game.canvas.width,   Game.canvas.height);
};

Game.mainLoop = function() {
  Game.clearCanvas();
  Game.draw();
  window.setTimeout(Game.mainLoop, 1000 / 60);
};

Game.draw = function() {
  Game.canvasContext.fillStyle = "blue";
  Game.canvasContext.fillRect(Game.rectanglePositionX, Game.rectanglePositionY, 10, 10);
};

document.addEventListener('DOMContentLoaded', Game.start);

document.addEventListener("keydown", function() {
  var d = new Date();
  console.log(Game.rectanglePositionX, Game.rectanglePositionY, d);
  const key = event.key;
  if (key == "ArrowUp") {
    if (Game.rectanglePositionY > 1) {
      Game.rectanglePositionY -= 10;
    } else {
      Game.rectanglePositionY += 10;
    }
  }

  if (key == "ArrowDown") {
    if (Game.rectanglePositionY < 470) {
      Game.rectanglePositionY += 10;
    } else {
      Game.rectanglePositionY -= 10;
    }
  }

  if (key == "ArrowLeft") {
    if (Game.rectanglePositionX > 1) {
      Game.rectanglePositionX -= 10;
    } else {
      Game.rectanglePositionX += 10
    }
  }

  if (key == "ArrowRight") {
    if (Game.rectanglePositionX < 790) {
      Game.rectanglePositionX += 10;
    } else {
      Game.rectanglePositionX -= 10;
    }
  }
  // Game.clearCanvas(); 
  // Game.draw();
});
canvas {
  background-color: chartreuse;
  border: solid 10px gold;
}
<html>

  <head>
    <title>MovingSquare</title>
    <script src="BasicGame.js"></script>
    <link rel="stylesheet" href="style.css">
  </head>

  <body>
    <div id="gameArea">
      <canvas id="myCanvas" width="800" height="480"></canvas>
    </div>
  </body>

</html>

Ура!

11
задан George Stocker 17 October 2012 в 11:14
поделиться

4 ответа

Поместите их на GitHub как общедоступные проекты и посмотрите, какова реакция. Можно получить больше процента по GitHub, а не по SourceForge, потому что существует меньше проектов, и я думаю, что большему количеству людей нравится просматривать доступные проекты на GitHub.

10
ответ дан 3 December 2019 в 04:54
поделиться

При подъеме их бесплатно, поскольку предлагают другие, вероятно, самая альтруистическая вещь сделать и действительно обладает преимуществом предоставления Вам хорошее нажатие..., если приложение является или достаточно сформировавшимся, что шанс критической ошибки является низким, или если Вы предназначаете при на самом деле тихой поддержке его, если ошибка обнаруживается. Для этого конкретного случая, поднимая его бесплатно является, вероятно, лучшим, хотя не, вероятно, не на SourceForge, еще Другом Неподдерживаемом Проекте.

Самая важная вещь, которую Вы делаете со своими старыми приложениями, учатся от них. Сделайте вскрытие, записав то, что Вы сделали правильно, что Вы сделали неправильно, что Вы сделаете по-другому. Особенно важный вещи, которые поймали Вас, интересно трудные ошибки или что-либо, что неоднократно доставляло неприятности. Вы никогда не можете делать другой части подобного кода, но Вы могли бы поразить тот же вид ошибки 50 раз.

5
ответ дан 3 December 2019 в 04:54
поделиться

Бесплатный вебсайт (геогорода и т.д.), чтобы загрузить их на и добавить немного информации является, вероятно, Вашим лучшим выбором.

Найдите что-то, что не требует обслуживания и позволит Вам просто загружать файлы, Вы хотите, поднять заголовок и описание (так, чтобы поисковые системы нашли их), и затем позволит Вам забыть о них.

6
ответ дан 3 December 2019 в 04:54
поделиться

Если Вы думаете его на самом деле полезное, то сделайте маленький веб-сайт или для него или что-то, сделайте себя, дрянной бесплатный вебсайт с www.spruz.com или .net I не действительно настолько уверен, если Ваш, который присоединил программы. Или если Вы действительно хотите поддержать его, делают проект SourceForge. Но Если это - ничего полезного, я сомневаюсь, что это собирается действительно использоваться.

2
ответ дан 3 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: