неожиданное появление синтаксической ошибки

#javascript #html #json #syntax-error #kaboom

#язык JavaScript #HTML #json #синтаксическая ошибка #бах-бах

Вопрос:

У меня нет никаких файлов JSON в этой программе, только js и html. Моя теория заключается в том, что программа запускает html как файл JSON. Я использую replit и kaboom для запуска игры

HTML-код:

 lt;!DOCTYPE htmlgt;  lt;htmlgt;  lt;headgt;  lt;titlegt;kaboomlt;/titlegt;  lt;meta charset="utf-8"gt;  lt;stylegt;  * {  margin: 0;  }  html,  body {  width: 100%;  height: 100%;  overflow: hidden;  }  canvas {  display: block;  }  lt;/stylegt; lt;/headgt;  lt;bodygt; {{kaboom}} lt;/bodygt;  lt;/htmlgt;  

код js:

 import kaboom from "kaboom";  // initialize context kaboom(); scene(); const SPEED = 320 var METEORX = 2 const NiceX = 20 //onsole.log(str(METEORX)) // load assets loadSprite("grass", "sprites/grass.png"); loadSprite("Player", "sprites/Player.png"); loadPedit("meteor", "sprites/meteor.pedit"); loadPedit("air Meteor", "sprites/air Meteor.pedit"); // add a character to screen const meteor = add ([  sprite("air Meteor"),  pos(rand(0, width()), 40),  area(),  move(DOWN, 300),  "meteor",  "enemy",  cleanup(20) ])  var player = add([  // list of components  "player",  sprite("Player"),  pos(center()),  area(),  body(),  health(3) ]); add([  rect(width(), 48),  "ground",  pos(0, height() - 48),  outline(4),  area(),  solid(),  color(127, 200, 255), ]) onCollide("player", "enemy", () =gt; {    player.hurt(1.5)     }) loadPedit("ground meteor", "sprites/ground meteor.pedit"); var difficulty = 5;  onCollide("enemy", (niceMeteor) =gt; {  addExplosion()  destroy(niceMeteor) }) onKeyPress("space", () =gt; {  if (player.grounded()) {  player.jump()  } })  onKeyDown("d", () =gt; {  player.move(SPEED, 0) })  onKeyDown("a", () =gt; {  player.move(-SPEED, 0) })  

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

1. Из вашего вопроса не ясно, что вызывает ошибку. Не могли бы вы предоставить более подробную информацию? (Вот почему переполнение стека требует, чтобы текст был включен в вопрос вместе с кодом, пожалуйста, не обходите это спамом в будущем)

Ответ №1:

Наиболее вероятный сценарий заключается в том, что один из указанных вами спрайтов не существует. В этом случае вы также должны увидеть ошибку: ERROR: sprite not found: "lt;your sprite name heregt;" . (Я думаю, что это ошибка, из-за которой kaboom вообще пытается проанализировать ответ как JSON в этом случае, потому что он получает ответ 404 с текстом/html типа содержимого).

Другая возможность, хотя и маловероятная, заключается в том, что один из ваших файлов спрайтов поврежден. .pedit Формат файла Kaboom на самом деле представляет собой файл JSON с данными изображения, встроенными в base64:

 {  "version": "1",  "width": 32,  "height": 32,  "palette": [[0,0,0,255],[255,255,255,255],[255,255,128,255],[255,128,255,255],[0,128,128,255],[128,0,255,255],[255,0,128,255],[0,255,255,255]],  "anims": {  "Test": {"from":0,"to":1,"loop":true}  },  "frames":[  "data:image/png;base64,...",  "data:image/png;base64,..."  ] }  

Поэтому, если один из этих файлов был поврежден во время редактирования, это также может привести к этой ошибке. Обычно для того, чтобы разобраться в этом, я бы посоветовал вам посмотреть трассировку стека на наличие ошибки, которая отображается в консоли разработчика вашего веб-браузера. Однако Kaboom не создает хороших трассировок стека для вызовов loadPedit . Поэтому вам лучше всего, вероятно, ставить несколько console.log('loading sprite XXX') утверждений перед каждым вызовом загрузки. Как только вы узнаете, какой файл pedit недействителен, вы можете переименовать этот файл из whatever.pedit в whatever.json и проверить содержимое в вашем реплике.