Javascript игра, модуль Рафаэль не определен - PullRequest
0 голосов
/ 21 октября 2011

Я разрабатываю игровой движок здесь: http://synodins.com/apps/tank_fight Но теперь, по какой-то причине, он больше не работает.Я не могу запустить модуль Raphael, когда я запускаю сайт с помощью веб-отладчика Mozilla, я получаю сообщение «Raphael is not определен».Но это не имеет никакого смысла, потому что это очень четко определено в модуле raphael.js.

Кроме того, иногда игра работает нормально, например, каждый 20-й раз, когда я пытаюсь.И нет четкой картины, что заставляет его работать.
Я печатаю Hello world 1, прежде чем пытаться инициировать Raphael, и Hello World 2 после попытки.
Кто-нибудь может увидеть, в чем проблема?

Ответы [ 3 ]

5 голосов
/ 21 октября 2011

Блок вызовов load_script загружает сценарии асинхронно.Вот почему, похоже, нет четкого шаблона.

Нет гарантии, что Raphael.js загружен (и, следовательно, Raphael определен) к тому времени, когда строка:

var playing_area = Raphael(0,50,1600,1600);

вызывается.

Вы должны подождать, пока весь документ не будет готов, прежде чем пытаться использовать переменные, определенные во внешних скриптах.При нормальных обстоятельствах это событие onload документа.Различные библиотеки, такие как jquery, также предлагают свои собственные «готовые» события, к которым вы можете привязаться, если будете их использовать.

Есть ли причина, по которой вы загружаете скрипты так, как вы делаете, а не просто используете разметку,как ниже?

<script src="raphael.js"></script>
1 голос
/ 21 октября 2011

Вы пытались переместить «Raphael.js», чтобы включить его, прежде чем что-либо еще? Возможно, Рафаэль не определен в той точке, в которой сценарий выше ему нужен.

1 голос
/ 21 октября 2011

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

Возможно, у вас естьпосмотрите на Modernizer.load () - это поможет вам синхронизировать загрузку ресурсов и добавить обратные вызовы при завершении загрузки: http://www.modernizr.com/docs/#load

...