Первые шаги...
Привет, мне понравилась идея создание текстовых игр и QSP движок показался прост в изучении, так как я в этом деле 0. Очень много вопросов закрываются путём изучения форума и справок по движку, и тут же огромная благодарность @aleksversus за его уроки. Но всё же вопросов, как всегда, больше чем ответов и это хорошо, поскольку это превратилось в хобби. Я надеюсь что вы поможете разобраться по ходу изучения в части из них, или направите в нужное направления, где это можно посмотреть (если похожую тему не найду).
На данном этапе я хотел бы создать игру на QGen - 4.2.0 beta 4 под плеер qsp - 5.7.0 для Windows.
И сразу хочу выразить большую благодарность всем тем кто будет мне помогать в решении (тупых) вопросов…
Для быстрого поиска:
Spoiler
Вопрос №1: Стиль кода
Вопрос №2: Ограничение переменных
Вопрос №3: Changelog
Вопрос №4: Error105
Вопрос №5: !BASE
Вопрос №6: Меню игры (массивы)
Вопрос №7: Модули
Вопрос №8: Метки
Вопрос №9: disablescroll = 0
Вопрос №10: loc
Вопрос №11: Список переменных (debugger)
Вопрос №12: Путь к игре
Вопрос №13: Однострочная запись
Вопрос №14: Знак <
Вопрос №15: Цикл
Решение №1: Файл .bat
Решение №2: Текст поверх картинки
Решение №3: Кнопка - Выход
Значит в 5.7.0 эти скобки вокруг названия локации ничего не дают, так как раскрываются, а потом выполняется операция сравнения, и только потом операция loc.
Хотя на скриншоте с новым редактором выражение выполняется нормально и плеер понимает, что скобки относятся к аргументу для операции. :/
Если пользуешься плеером 5.7.0, то наверняка у тебя есть оффлайн-справка для 5.6.4. Там есть список всех операций в порядке повышения приоритета. Повесь его перед глазами, чтобы легче было отлавливать неоднозначности.
if (loc '555') = -1: ...
Должен тоже обрабатываться правильно, но лучше использовать вариант вообще без сравнения, как сказал Байт.
Да, спасибо! Пока остановлюсь на таком варианте:
if (loc '555') ! 0:
Условия работает во всех плеерах и читается понятно (у меня и так куча багов вылазит, пока рано отказываться от сравнений, может позже).
Вчераif loc(’555’) = -1: не работал, сегодня заработал, хоть бери и делай скриншоты кода на каждом этапе. Я хз как так получается, походу нужно взять перерыв.
Вопрос №11 «Список переменных (debugger)»
Можно как-то посмотреть список переменных задействованных в середине игры?
1. Знаю как смотреть список переменных в начале игры.
2. Знаю как смотреть по 1 конкретной.
Нужно посмотреть список именно в середине игры, понять что нечего не пропустил (по типу arrsize только для всех переменных).
Существует несколько способов это сделать:
1. В режиме отладки выполнять команды из командной строки плеера (дополнительно сделать специальную локацию-функцию для вывода значений массива по имени, например).
2. Аналогично варианту 1, но в коде игры явно прописать вывод отладочной информации через вызовы спец. функций.
3. Использовать библиотеку отладчика (уже не помню, что именно там доступно, но посмотреть можно). Доступна здесь: https://qsp.org/index.php?option=com_content&id=71&Itemid=56
4. В qSpider хотели добавить режим отладки, где теоретически можно остановить выполнение кода и посмотреть все переменные. Не знаю доступно это или еще нет.
Byte, вроде прояснилось куда нужно двигаться, спасибо!
Вопрос №12 «Путь к игре»
Это вопрос по плееру. Накрылся HDD и игра осталась в облаке гугла. Сейчас сделал синхронизацию папок обратно на локальный диск и плеер не отображает файлы .png и .gif (.jpg отображает нормально),(замена плеера не помогла). Копирую игру в папку без синхронизации и всё работает. Просто не могу понять как это связано.
Отключил синхронизацию и нечего не поменялось, переношу игру в другую папку и всё работает.
Это какой-то заговор =), могу конечно забить, но исходник будет другой даты чего не хотелось бы.
Может кто сталкивался с таким?
Возможно файлы .png и .gif не полностью синхронизовались и отсутствуют на локальном диске.
Сам плеер пытается читать указанные в игре файлы и если они существуют и не повреждены, то все должно загружаться.
Либо синхронизация файлов каким-то образом блокирует доступ к этим файлам (это возможно).
Byte, нашёл причину (дело не в облаке), но не понял почему так.
С другим HDD пришлось создавать новые пути к файлам. Так вот я решил подписать папку через # (подумал так она будет всегда на 1м месте и не нужно будет долго искать), #Google - от этого и не отображаются некоторые типы файлов.
Путь к игре - E/#Google/qsp/game/my_game.exe
Плеер и игра в папке - game, но иза # не отображаются файлы. Не могу понять плеер вить отображает файлы от файла auto.qsp, каким боком его волнует название самой первой папки.
Думаю wxWidgets загружает файлы картинок через обработчик URL с типом “file:”, а “#” в URL выступает якорем, то есть обрабатывается специальным образом. Не могу сказать баг это или нет, но рекомендую сменить имя директории :)
Позже посмотрю можно ли это исправить.
Byte, я хотел как лучше, а получилось как всегда. Спасибо за ответ =).
Вопрос №13 «Однострочная запись»
Написал кнопку через динамик в виде:
$vol["musmax"]='volmus +=20 & play "sound/effect/button.ogg" & if volmus>100: volmus=100 & gt $curloc'
она игнорирует volmus +=20, но если написать в таком виде то всё норм:
$vol["musmax"]='
volmus +=20
play "sound/effect/button.ogg"
if volmus>100: volmus=100
gt $curloc'
это не только кнопка, любая “длинная” однострочная запись начинает подлагивать. Так и должно быть или я что-то не так делаю?
volmus +=20 & play "sound/effect/button.ogg" & if volmus>100: volmus=100 & gt $curloc
здесь “gt $curloc” относится к “if”, то есть выполняется только если “volmus>100”.
во втором случае логика кода отличается - gt выполняется в любом случае.
Еще для кода лучше использовать скобки .
Byte, вот где эти косяки по вылазили, но как закончить однострочную запись чтобы сработал код после условия?
Как вариант, просто дописал условия:
$vol["musmin"]={volmus -=20 & play "sound/effect/button.ogg",voleff & if volmus<0: volmus=0 & gt $curloc else gt $curloc}
Жаль нету end в однострочной записи для условий, могло быть покороче. Спасибо!
Tom Run,
всегда можно завернуть условие в фигурные скобки и выполнять динамиком.
volmus +=20 & play "sound/effect/button.ogg" & dynamic {if volmus>100: volmus=100} & gt $curloc