Игра на холсте: моя еда исчезает

#javascript #html #canvas #coffeescript

#javascript #HTML #холст #coffeescript

Вопрос:

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

Мне удалось создать игру, однако в ней есть две ошибки, которые продолжают появляться.

РЕДАКТИРОВАТЬ: ПЕРЕМЕСТИЛ ПЕРВУЮ ОШИБКУ В ДРУГОЙ ВОПРОС, поскольку на этот вопрос вроде как ответили!

Еще одна ошибка заключается в том, что еда иногда не появляется. Я понятия не имею, почему это происходит, но единственное, что я могу придумать, это еда, которая на самом деле появляется внутри змеи. Тем не менее, я также внедрил проверку для этого, и это все еще происходит:

 inSnake = (x, y) ->
    for part in Snake.position              # check if the food is being placed inside the snake
        if x == part.x amp;amp; y == part.y
            true
    false

placeFood = ->
    x = Math.round Math.random() * MAX_X - 1
    y = Math.round Math.random() * MAX_Y - 1

    if inSnake x, y                                     # if so, run placeFood() again
      placeFood()   

    Food.position = { x: x, y: y }
  

Еда должна быть размещена случайным образом ВНУТРИ моего холста (я указываю MAX_X и MAX_Y), поэтому я могу думать только о том, что она находится внутри змеи.. У меня возникли проблемы с отладкой этой проблемы.

Демонстрационную версию приложения можно найти здесь.

Заранее спасибо!

Комментарии:

1. Вы уверены, что это не из-за пищевого отравления (потеря еды)? <выстрел по ободу>

Ответ №1:

 inSnake = (x, y) ->
    for part in Snake.position              
        if x == part.x amp;amp; y == part.y
            true
    false
  

Похоже, вы хотите сказать return true . В противном случае он всегда будет выполняться через весь цикл и возвращаться false в конце функции.

Комментарии:

1. Я получаю Uncaught RangeError: Maximum call stack size exceeded , когда я это меняю; похоже, тогда он продолжает вызывать placeFood().

2. попробуйте распечатать x и y. И посмотрите на скомпилированный JS. Без круглых скобок я понятия не имею, что Math.round Math.random() * MAX_X - 1 это значит.

3. О, вы правы. Мне нужны были круглые скобки (MAX_X — 1). Я думаю, это исправляет ошибку исчезновения еды. Спасибо!