#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). Я думаю, это исправляет ошибку исчезновения еды. Спасибо!