Часто задаваемые вопросы ("FAQ") |
Содержание Previous Next |
Я пишу такое условие "if a=8 or 9 or 10: ...", а происходит ошибка. Почему?
Как и во всех языках программирования, подобная запись недопустима. Нужно писать так:
if a=8 or a=9 or a=10: ...
Как сделать плэйлист (чтобы при окончании одной мелодии воспроизводилась другая, затем ещё одна и т.д.)?
См. примеры в папке "%AppPath%\Demos" (файлы "playlist1.gam, playlist2.gam, playlist3.gam").
Как сделать, чтобы при выборе предмета в списке происходило нужное мне действие?
На локации-обработчике выбора предмета ("$ONOBJSEL") в поле "Выполнить при посещении" введите:
if $selobj='предмет': ! нужные операторы через & ! если нужно, то вставьте подобные условия unselect
Как сделать показ анимации в игре (последовательно с паузой вывести картинки)?
1) В нужном месте локации введите:
view '[картинка 1 (название файла)]' wait 500 view '[картинка 2]' wait 500 view '[картинка 3]'
2) С помощью цикла:
i=0 :loop if i<10: wait 500 view 'pic<<i>>.jpg' i=i+1 jump 'loop' end
3) Поддерживаются анимированные GIF-файлы. Т.е. $BACKIMAGE='mult.gif' или view 'mult.gif'
Как сделать в игре голод / увеличение числа жизней со временем?
1) Добавить следующий код на локацию-обработчик перехода на новую локацию:
голод=голод-1 if голод<10:pl 'Вы голодны!'
2) Сделать аналогичную проверку на локации-счётчике.
Как проверить, был ли герой на какой-либо локации?
1) На той локации, которую нужно проверить, введите:
был_здесь=1
А на локации, где нужно это проверить:
if был_здесь=1: ! операторы
2) Через массивы, с индексированием через строки:
was_here[$curloc]=1
Проверка:
if was_here['башня']: ! операторы
У меня в квесте локация-счётчик загромождена до предела. Как я могу облегчить ввод кода?
1) Разбейте код на процедуры, поместите их на разных локациях в поля "Выполнить при посещении", а затем вызывайте таким образом:
gosub 'LOC1' gosub 'LOC2'
и т.д. 2) Возможно, часть текущих функций локации-счётчика возможно перенести на другие локации.
В игре заметно торможение, подвисание. Почему? Как исправить?
Скорее всего, это из-за огромного количества операторов на локации-счётчике. Уберите ненужное, отредактируйте код.
Я создавал квесты на платформе URQ. А как здесь сделать деньги?
В начале игры введите команду:
addobj 'Деньги'
Затем, когда нужно, изменяйте переменную "Money". Например, так:
Money=Money+1
На локации-обработчике выбора предмета сделайте обработку выбора предмета "Деньги":
if $selobj='Деньги':pl 'У вас <<money>> монет.' unselect
Почему я пишу "set a=4.676", а происходит ошибка?
Все числовые переменные должны быть целочисленного типа.
Если дробные числа не поддерживаются, то как реализовать рубли / копейки?
Для этого достаточно привести единицы измерения к меньшим. В данном случае, можно представлять деньги количеством копеек. Пример вывода данных:
money = 1234 rub = money/100 kop = money - rub*100 'У вас <<rub>> руб. <<kop>> коп.'
Как ограничить вместительность рюкзака?
Для этого используйте функцию "COUNTOBJ". 1) Проверяйте перед добавлением нового предмета кол-во предметов в рюкзаке, а затем решайте: добавлять ли этот предмет, или сделать что-либо ещё. 2) На локации-обработчике добавления предмета удаляйте добавленный предмет:
if countobj=5:delobj $args[0]
3) Можете написать подпрограмму добавления предмета (например, "ADDOBJECT") и через параметр передавать ей название нужного предмета. На этой локации, к примеру, такой код:
if countobj=10: ! код обработки исключения ! ... exit end addobj $args[0]
Тогда, чтобы добавить какой-либо предмет (например, "ложка"), нужно будет писать:
gs 'addobject','ложка'
Как сделать меню предмета?
Существует несколько способов задания различных действий для предметов: 1) Дополнительные действия. Вы обрабатываете выбор предмета (к примеру, на локации-обработчике выбора предмета), добавляя (с помощью оператора "ACT") новые действия. 2) С помощью строки ввода. На локации-обработчике строки ввода проверяются какие-либо команды и, если нужно, выполняются необходимые действия. 3) С помощью меню пользователя. См. раздел "Создание меню для предметов".
Как сделать набор локаций (например, повышение уровня героя) подпрограммой?
Нужно в обработке выбора действия, после которого происходит возврат к основной программе, поставить "GOTO $ARGS[0]", и вызывать такую "подпрограмму" с параметром $CURLOC. Т.е. вам, например, нужно сделать универсальную подпрограмму, в которой играющий распределяет очки навыков по умениям. Вы описываете соответствующую локацию (например "Points"), одним из базовых действий на которой является пункт "Далее". В описании реакции на выбор этого действия, вы пишете
goto $args[0]
и когда нужно перейти на распределение очков
goto 'Points',$curloc
Вызов такой подпрограммы можно сделать в реакции на выделение какого-либо "предмета".
Напишите, пожалуйста, пример, в котором игрок мог бы перейти на новую локацию только при наличии определённого предмета.
Можно реализовать, например, так:
if obj 'газета': act 'сжечь газету':gt 'сжигание_газет' end
То же самое:
if obj 'газета':act 'сжечь газету':gt 'сжигание_газет'
Ещё пример:
act 'сжечь газету': if obj 'газета':gt 'сжигание_газет' 'у вас нет газеты!' end
Как сделать, чтобы игрок мог перейти на новую локацию только при вводе верного пароля?
Например, так (с созданием дополнительного действия):
if input('Введите пароль') = 'мой пароль':act 'Пройти':gt 'секретная база'
Или так (без дополнительного действия):
if input('Введите пароль') = 'мой пароль':gt 'секретная база'
С сообщением при неверном пароле:
if input('Введите пароль') = 'мой пароль': gt 'секретная база' else 'Вход запрещен!' end
Также можно воспользоваться строкой ввода (см. функцию "$USER_TEXT").
Подскажите, что нужно сделать, чтобы при совершении действия на одной локации автоматически появлялась новое действие на другой локации (например, действие "Поднять меч" автоматически добавляло определённое действие на локации "Инвентарь")?
Один из самых простых вариантов - использование переменной на обработке действия, т.е. пишете:
swordtaken=1
а на той локации, где нужно добавить действие (в поле "Выполнить при посещении"):
if swordtaken: act 'Действие': '!!!!' end end
Как организовать многомерный массив?
1) Самый удобный способ - использование массивов, индексируемых через строки. Например:
$карта_вещь['<<x>>_<<y>>'] = 'палка' карта_нпс['<<x>>,<<y>>,<<z>>'] = 12
2) Отображение многомерного массива на одномерный. Например:
$карта_вещь[x+y*ширина] = 'палка' карта_нпс[x+y*ширина+z*ширина*высота] = 12
Есть цикл, в котором добавляются действия. К сожалению, при выборе добавленного действия, используются значения переменных не на момент добавления, а текущие значения. Как решить проблему?
1) Наилучший вариант - вычислять значения переменных по названию выбранного действия:
i = 0 :nextEnemy if i < enemies: $actdesc='Атаковать <<i + 1>>' n_enemy[$actdesc] = i act $actdesc: n = n_enemy[$selact] & xgt 'атака' i = i + 1 jump 'nextEnemy' end
2) Добавление действия с помощью оператора "DYNAMIC":
i = 0 :nextEnemy if i < enemies: dynamic " act 'Атаковать <<i + 1>>': n = <<i>> & xgt 'атака' " i = i + 1 jump 'nextEnemy' end
При этом значения всех подвыражений будут вычислены перед добавлением действия.
Как сделать действие выхода из игры? Т.е. нажал "Выход" и приложение закрылось?
Для выхода можно нажать крестик в самом верху... А в игре выход можно оформить по-другому. Например, титры сделать, после них пожелания и поздравления. Ну а в конце написать "THE END" без каких-либо действий. Будет очень даже приличный выход. |