RU

Первые шаги...

Tom Run #2765 31.08.2024 11:55 97 comments 13994 views

Привет, мне понравилась идея создание текстовых игр и 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: Кнопка - Выход

Edited at 26.10.2025 17:35 (3 months ago)
Aleks Versus Moderator 31.10.2024 06:13 (1 year ago)

Значит в 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 в однострочной записи для условий, могло быть покороче. Спасибо!

Aleks Versus Moderator 01.12.2024 06:39 (1 year ago)

Tom Run,
всегда можно завернуть условие в фигурные скобки и выполнять динамиком.

volmus +=20 & play "sound/effect/button.ogg" & dynamic {if volmus>100: volmus=100} & gt $curloc

Log in or Register to post comments.