2014-02-03 2 views
0

Jsfiddle: http://jsfiddle.net/seekpunk/6eeKH/15/Update в html5 холст игры не работает должным образом

код:

if (this.collection.length > 0) { 
          if (((this.collection[0].blockX + this.collection[0].blockW) >= cw) || (this.collection[0].blockX <= 0)) { 
           this.collection[0].blockSpeed *= -1; 
          } 
          this.collection[0].blockX += this.collection[0].blockSpeed; 

         } 

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

+0

Какой блок? Демо выглядит отлично. –

+0

Первый блок сверху должен идти влево и вправо из-за функции обновления, если вы удалите эту строку 'if (this.collection.length> 0) {' консоль говорит, что 'this.collection [0]' is 'undefined' – Sora

ответ

0

Я пытаюсь объяснить это подробно, пожалуйста, несите меня.

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

Так что теперь это, как ваш код работает в цикле:

  1. Ваш код только изменение позиции 1-го блока, т.е. this.collection[0].blockX
  2. добавляет еще 5 блоков в коллекции массива с той же позиции. напр: Хотя Update метод вызывается во второй раз, ниже линии получите выполнить

    addBlocks(4, "Red", 50, 70, 50, 5); 
    

    Так что еще один блок будут добавляться в 6-ой позиции массива.

  3. Оказывая, он рисует первый блок с обновленными координатами из-за пункта 1. и рисует этот блок снова из точки 2.

Это является причиной того, что в два раза появляется.

Вам нужно немного изменить эту логику, чтобы решить эту проблему.

Надеюсь, что это имеет смысл.

+0

Я отредактировал свой вопрос, могу ли вы, пожалуйста, проверить новый jsfiddle – Sora

+0

Я отредактировал свой отзыв в соответствии с вопросом –

+0

вчера я перепроверяю код и выясняю, что я должен только называть уровень вне цикла один раз, и он отлично справился с проверкой jsfiddle: http://jsfiddle.net/seekpunk/6eeKH/19/ – Sora

0

Теперь я думаю, что вы очищаете платформы от массива коллекции, прежде чем какие-либо координаты получат возможность применить и перерисовать на холст , Если вы удалите вызов на «Blocks.clear()», платформа перемещается.

+0

yup я знаю, но не должен я очищать массив, когда хочу нарисовать следующий уровень? сделать несколько новых блоков? плюс, если я удалил эту строку, дублируется блок – Sora

+0

Ах, массив не нужно очищать. Что нужно очистить, так это холст. Итак, это пример рисования всех блоков, а затем на следующем кадре вы очистите холст. После этого вы обновляете позиции блоков и т. Д., А затем вызываете другую ничью на холст. Итак, что вы активно делаете, вам не нужно воссоздавать все, вы просто обновляете то, что уже есть, если это имеет смысл ... – Drunkenoodle

+0

ohhhhhhhhhhhhhhhhhhhh я хорошо вижу этот совет, но как вы предлагаете мне обновить моя работа ? где я должен позвонить ctx.Функция clearRect bcs уже вызывается в функции обновления – Sora

Смежные вопросы