2016-03-28 9 views
1

Я изучал много разных учебников, изучая кодирование, которое я делал, и я заметил одно общее различие. В основном, некоторые люди используют HTML исключительно для написания сценариев, используя тег сценария, а некоторые используют JavaScript и ссылаются на скрипт. Моя проблема заключается в двух кодах. Первый из них:Вызов вещей в <script> или с помощью JavaScript?

<!DOCTYPE html> 
<html> 
    <head> 
     <script src='babylon.js'></script> 
     <title>game or some shit</title> 
     <meta charset="utf-8"> 
     <style> 
      .canvas { 
       height: 100%; 
       width: 100%; 
       padding:0; 
       margin:0; 
       overflow: hidden; 
      } 
     </style> 
    </head> 
    <body> 
     <canvas id='gamecanvas'></canvas> 
     <script> 
      var BABYLON; 
      var canvas = document.getElementById('gamecanvas'); 
      var engine = new BABYLON.Engine(canvas, true); 
      var scene = new BABYLON.Scene(engine); 
      var camera = new BABYLON.ArcRotateCamera('camera', 1,2,20, new BABYLON.Vector3(0,0,0), scene); 
      var light = new BABYLON.PointLight('light', new BABYLON.Vector3(0,0,10), scene); 
      var ball = new BABYLON.Mesh.CreateSphere('ball', 10, 1.0, scene); 

      scene.activeCamera.attachControl(canvas); 
      engine.runRenderLoop(function() 
      { 
       scene.render(); 
      }); 
      canvas.height = window.innerHeight; 
      canvas.width = window.innerWidth; 
     </script> 
    </body> 
</html> 

функции правильно, но когда я ссылаться на него в сценарии с помощью внешнего скрипта вроде этого:

var BABYLON; 
var canvas = document.getElementById('gameCanvas'); 
var engine = new BABYLON.Engine(canvas, true); 
var scene = new BABYLON.Scene(engine); 
var camera = new BABYLON.ArcRotateCamera('camera', 1,2,20, new BABYLON.Vector3(0,0,0), scene); 
var light = new BABYLON.PointLight('light', new BABYLON.Vector3(0,0,10), scene); 
var ball = new BABYLON.Mesh.CreateSphere('ball', 10, 1.0, scene); 

function INIT_GAME() 
{ 
    canvas.height = window.innerHeight; 
    canvas.width = window.innerWidth; 
    scene.activeCamera.attachControl(canvas); 
    engine.runRenderLoop(function() 
    { 
     scene.render(); 
    }); 
} 

и назвать его в HTML

<!DOCTYPE html> 
<html> 
    <head> 
     <script src='jquery2.2.2.min.js'></script> 
     <script src='game.js'></script> 
     <script src='jquery.js'></script> 
     <script src='babylon.js'></script> 
     <title>beta af lmaoo</title> 
     <meta charset="utf-8"> 
     <style> 
      .background { 
       position: absolute; 
       height: 100%; 
       width: 100%; 
       top: 0px; 
       left: 0px; 
      } 
      .start { 
       position:absolute; 
       bottom:21%; 
       right:40%; 
      } 
      .canvas { 
       height: 100%; 
       width: 100%; 
       padding:0; 
       margin:0; 
       overflow: hidden; 
      } 
     </style> 
    </head> 
    <body> 
     <canvas id='gameCanvas'></canvas> 
     <menu> 
      <img class='background' src='Images/backgroundImg.jpg'/> 
      <embed src='Audio/backgroundMusic.mp3' autoplay='true' loop='true' width='0' height='0'/> 
      <input class='start' type='image' src='Images/start.jpg' width='275' height='150' onclick='INIT_GAME();'/> 
     </menu> 
    </body> 
</html> 

Это Безразлично Функция. Может ли кто-нибудь сказать мне, почему сценарий не будет работать, когда я напечатаю его извне в другом файле JavaScript и вызову его, но это будет в HTML-файле? Кроме того, что вы предпочитаете использовать? Использует ли <script> или использует файл JavaScript?

ответ

5

Вы неправильно определили проблему. Это не имеет никакого отношения к перемещению сценария из встроенного файла во внешний файл.

Вы также (и, что более важно) перемещали элемент сценария снизу gameCanvas над ним.

Теперь, когда вы говорите var canvas = document.getElementById('gamecanvas');, вы получаете null (потому что элемент еще не существует).

(Также похоже, что вы переместили его до babylon.js, так что вы также будете ошибаться, потому что BABYLON.Engine еще не существует).

+0

Чтобы исправить это, вы можете переместить ссылку на файл на тело. Я думаю, вы могли бы подождать, пока дом не будет загружен. –

+0

Итак, порядок имеет значение. Хорошо знать. Я буду помнить об этом –

0

Чтобы распространить то, что упомянуто @Quentin.

<script src='jquery2.2.2.min.js'></script> 
<script src='game.js'></script> 
<script src='jquery.js'></script> 
<script src='babylon.js'></script> 

Если эти метки сценария размещены, важно, и так далее. Когда они находятся в «HEAD», они будут выполнены очень рано в процессе рендеринга. Ваш HTML отображается сверху вниз, и каждый скрипт выполняется при их вызове. Если вы не хотите беспокоиться о том, что DOM (все внутри тега BODY) не готово, вы захотите поместить все теги скриптов в нижней части вашего HTML BODY прямо перед закрытием </body>. Кроме того, если они не работают правильно в этот момент, убедитесь, что они в порядке. Из вашего исходного содержания приведенный выше список - NOT правильный, поскольку вам нужно иметь babylon.js перед game.js, скорее всего.

Также как примечание стороны: не импортируйте jQuery более одного раза, так как это может быть проблематично.

+0

Чтобы уточнить, я не импортировал jQuery дважды, файл просто называется jQuery. Спасибо за информацию! –

+0

Так что я знаю, что это не очень важно, но названный «jQuery», я бы порекомендовал, чтобы вы вводили имена модулей AMD. – MattSizzle

0

Вот как я загружаю свой JavaScript ...

ИЗ HTML:

включаемого:

<script src="http://js.awwshop.com/render/pub/shkawn/shkawn.js" type="text/javascript"></script> 

Вызов:

<body onload="Init.Load();"> 

Загрузчик КЛАСС

var Init = new function() { 


// POPUP IMAGE SCRIPT 
document.write("<script src='http://js.awwshop.com/render/pub/shared/parse.js' type='text/javascript'></script>"); 
document.write("<script src='http://js.awwshop.com/render/pub/shared/popup-image.js' type='text/javascript'></script>"); 

// GO TO URL SCRIPT 
document.write("<script src='http://js.awwshop.com/render/pub/shared/go-to-url.js' type='text/javascript'></script>"); 


this.Load = function() { 


    PopupImage.LoadPopupImages("http://img.awwshop.com/render/pub/shkawn/progressbar.gif"); 


} 

}

Кроме того, я использую классы для всех своих вещей. Это означает, что каждый из указанных файлов включает/all-it-is-является классом.

Я никогда не сталкивался с ошибками нулевой ссылки, делая это таким образом.

+0

Я вообще не очень организован, я, наверное, должен привыкнуть к этой привычке. Благодаря! –

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

  • Нет связанных вопросов^_^