#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
и проверить содержимое в вашем реплике.