Как сделать?
…
$Ability = {
*nl 'Index = '
*p "<<AGRS[0]>>,<<ARGS[1]>>"
$cell["<<AGRS[0]>>,<<ARGS[1]>>"] = "hide"
}
dynamic $Ability,1,3
*nl 'Test'
*nl $cell["0,3"]
Результат:
Index = 0,3
Test
hide
Это надо осмыслить. Нужно немного времени.
Все очень просто. Вот так работает:
$Ability = {
$cell["<<ARGS[0]>>,<<ARGS[1]>>"] = "hide"
}
dynamic $Ability, 1, 3
*nl $cell["1,3"]
Надо было всего-лишь писать ARGS[0], а не AGRS[0].
Storm, посмотрите внимательно на первую строку своего кода:
$Ability='$cell["AGRS[0],ARGS[1]"]="hide"'
Вот что попадает на съедение оператору DYNAMIC:
$cell["AGRS[0],ARGS[1]"]="hide"
Именно этот код он пытается выполнить. То есть, прямым текстом, элементу массива $cells с ключом “ARGS[0],ARGS[1]” (без всяких подстановок, это обычная строка, не код) присваивается значение “hide”. Поэтому и не работает.
UPD. Кроме того, как выше заметил evp, в названии ARGS была совершена опечатка.
Чтобы сформировать ключ из двух числовых аргументов, можно сделать так:
$Ability='$cell[STR(ARGS[0]) + "," + STR(ARGS[1])]="hide"'
DYNAMIC $Ability, 1, 3
Если числа 1 и 3, например, хранятся в переменных row и column, то можно без STR и аргументов. Получится более приятно на вид:
! Где-то раньше присвоили значения...
$row = 1
$column = 3
! ...а теперь используем их.
$Ability='$cell["<<row>>,<<column>>"]="hide"'
DYNAMIC $Ability
UPD. Выше имеется решение от evp с фигурными скобками вместо одинарных кавычек. Пожалуй, наиболее правильное, поскольку код обычно лучше заключать именно в фигурные скобки, а не в кавычки. Как минимум, в редакторе нагляднее выглядит :)
Однако в зависимости от вашей реальной задачи, могут быть нюансы, из-за которых тот или другой метод не подойдёт.
Будьте внимательны с подстановками и динамическим выполнением кода. Легко запутаться и что-нибудь перепутать, как Aleks Versus, случайно посоветовавший неправильное решение :) Главное - помнить, что подстановки вида <<переменная>> производятся равно в тот момент, когда обрабатывается строка. Так, например:
$name = "Дима"
$hello = "Привет, <<$name>>"
$name = "Вова"
*p $hello
поздоровается с Димой, а не Вовой.
Rivvil, все это чепуха. Его код работает (за исключением того, что код динамика следует брать в фигурные скобки). Просто читайте выше.
Stormне запутался с подстановками. Вот так код не работает:
$Ability='$cell["<<ARGS[0]>>,<<ARGS[1]>>"]="hide"'
DYNAMIC '<<$Ability>>',1,3
'<<$cell["1,3"]>>'
А вот так - работает:
$Ability={$cell["<<ARGS[0]>>,<<ARGS[1]>>"]="hide"}
DYNAMIC '<<$Ability>>',1,3
'<<$cell["1,3"]>>'
Это все, что следовало объяснить. Думаю из текста вопросов понятно, что он не первый раз использует двумерные массивы. Может быть он на них собаку съел :)
Может быть следовало добавить, что угловые скобки и кавычки некоторые у него лишние:
$Ability={$cell["<<ARGS[0]>>,<<ARGS[1]>>"]="hide"}
DYNAMIC $Ability,1,3
$cell["1,3"]
evp, Storm, Rivvil,
прошу прощения. Действительно в моём сообщении косяк. Не с AGRS-ARGS скорее, а в том, что я не учёл двойные апострофы. Но, evp, кажется, Storm всё таки застопорился в неправильном прочтении подвыражений вкупе с областью действия значений массива args.
Storm,
Если взять код evp, то фигурные скобки помогают изолировать args, употребляющиеся в строке
$Ability={$cell["<<ARGS[0]>>,<<ARGS[1]>>"]="hide"}
от кода вне фигурных скобок. Применительно к предложенному мной примеру, это будет давать несколько иной результат:
args[0] = 1
dynamic {*pl args[0]
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'},3
сравнить со старым:
args[0] = 1
dynamic "*pl <<args[0]>>
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'",3
Всё дело в порядке чтения и раскрытия подвыражений в сдвоенных угловых скобках. В грубом приближении:
последний образец:
Spoiler
args[0] = 1
dynamic "*pl <<args[0]>>
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'",3
В первой строке присваивается значение переменной args[0]. Это значение будет действовать только на локации.
Далее выполняется оператор dynamic, которому передаётся аргумент - строка, но
строка лежит в сдвоенных апострофах. Интерпретатор находит в ней подвыражения, которые следует вычислить до передачи оператору dynamic.
условно назовём этот процесс - раскрытие угловых скобок.
в результате строка принимает вид
"*pl 1
*pl '=1'
*pl args[0]
*pl '=args[0]'"
это значение и передаётся оператору dynamic. Ему так же передаётся число 3 в качестве «нулевого» аргумента.
Теперь dynamic выполняет получившийся в строке код, как непосредсnвенно код:
*pl 1
*pl '=1'
*pl args[0]
*pl '=args[0]'
здесь третьей строкой мы видим вывод args[0]. Это args[0] не то же самое args[0], коему было присвоено значение 1. Это args[0], работающее только на «территории» кода, отданного оператору dynamic, то что мы передали следом за передачей строки с кодом. И его значение равно 3.
Именно поэтому дважды выводится единица, и только один раз тройка.
предпоследний образец:
Spoiler
args[0] = 1
dynamic {*pl args[0]
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'},3
В первой строке присваивается значение переменной args[0]. Это значение будет действовать только на локации.
Далее Выполняется оператор dynamic, которому передаётся аргумент - строка, но
строка лежит в фигурных скобках, а значит вычисление подвыражений в ней производиться не будет.
что в свою очередь означает, что оператору dynamic приходится обрабатывать вот такой код:
*pl args[0]
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'
(я намерено оставил первую строчку, чтобы показать, что нельзя использовать в фигурных скобках подвыражжения)
Теперь в качестве «нулевого» аргумента оператору dynamic передано значение 3. Это-то значение и присвоится args[0], которое будет действовать только
на «территории» кода, выполняемого оператором dynamic. И тут происходит следующее:
первая команда кода выводит args[0], которое равно 3.
Вторая команда кода должна вывести строку, в которой присутствует подвыражение. «Скобки раскрываются» с использованием args[0], действующем на «территории» кода, переданного оператору dynamic.
третья команда повторяет первую
четвёртая команда должна вывести строку, в которой нет подвыражений, ничего не вычисляется, выводится тупо строка «=args[0]».
Точно так же код бы сработал без фигурных скобок, если заранее убрать подвыражения, как советовал Rivvil:
args[0] = 1
dynamic "*pl str(args[0])
*pl '='+str(args[0])
*pl args[0]
*pl '=args[0]'",3
Aleks Versus, спасибо большое за громадное пояснение. Именно момент с “раскрытием угловых скобок” я не понимал раньше. То есть я не знал что подстановка подвыражения идет до того как код передаётся оператору DYNAMIC. И получается что при использовании фигурных скобок такой подстановки не происходит, в следствии чего код выполняется так, как мне нужно.
evp, да-да, там была ошибка, которую я, к сожалению, не заметил когда писал код и застрял на ней. О применении фигурных скобок читал на Вики, но дошел до их применения только сейчас. В общем, спасибо за то, что показал место, где я ошибся :)
Rivvil, спасибо что приняли участие беседе). Всё-таки я не профессиональный программист, а только осваиваюсь :)
Вычистил тему от переходов на личности.
Ребята, ещё раз прошу всех уважать друг друга. Обходитесь без упрёков и подколов.
Ни один спор не должен переключаться на личности собеседников. Это золотое правило.
Я буду за этим следить. Но мне хочется, чтобы вмешиваться не приходилось, а вы сами держали себя в руках. Касается всех без исключения.
Если желаете как-то прокомментировать ситуацию, пишите мне в личку, или друг другу в личку. Публичные обсуждения “кто кого обидел”, “кто на самом деле виноват” точно так же недопустимы. Все личные вопросы выясняются в личке. Никаких публичных разборок.
Приветы!
Отсутствие возможности воспроизведения видео привела к решению использования GIF-анимации, всвязи с этим возникает ряд вопросов:
1.Как сделать (а вернее возможно ли) размещение картинки по центру окна? ‘<center><img src=“gifDA\aji03.gif” ></center>’ размещает картинку по центру справа-слева, а как задать значение ентра между верхом и низом?
2.Как сделать (а вернее возможно ли) однократное воспроизведение анимации (в данный момент без дополнительных условий анимация зациклена) или как вариант появление действия далее через икс секунд, где икс время однократного воспроизведения анимации?
3. Как сделать, чтобы анимация растягивалась вдвое (втрое), смысла увеличивать параметры самой анимации нет (итак уже 400х170, 11мб, потеря качества не интересна, а увеличение размера приводит к увеличению веса)?
Hallo=З
У меня тут тоже вопросец встрял. Он, возможно, довольно банален. Однако, я уже несколько дней ломаю голову над тем, как можно реализовать инвентарь на qgen без использования функций OBJ. Фиксированные данные то сделать при помощи массивов довольно просто, однако, меня интересует динамический инвентарь.
Тематика RPG-шная:
- добавление/удаление случайных предметов в массив/из массива;
- выдача случайных значений/параметров для предметов в массивах;
- возможность изменения значений/параметров у предмета, в зависимости от выбора;
- возможность взаимодействия с выбранным предметом массива; Если кто-то уже имел с этим дело, был бы очень признателен если-бы объяснили! Я сейчас очень туплю на этом моменте.
Aaaspavel,
обрати свой взор на Quest Navigator.
применительно к “классическому” плееру:
1. Думаю отцентрировать по вертикали без участия игрока не получится
2. Есть на форуме тема действия по таймеру. А может быть даже есть пример в разделе для разработчиков. В принципе, если подумать, зная точно время проигрывания анимации до миллисекунд, можно сделать подмену анимированной картинки статичной (и наоборот). Однако, боюсь, что на разных устройствах скорость проигрывания gif’ов слегка отличается.
3. Растягивание картинок по ширине (и по высоте вроде как) присутствует.
Svartberg,
у меня есть недобитый движок. И статейки к нему. Посмотри, вдруг поможет.
P.S.: непосредственно игрой там является файл fb_v.0.2.qsp
Aleks Versus:
Svartberg,
у меня есть недобитый движок. И статейки к нему. Посмотри, вдруг поможет.
Спасибо, сейчас заценим)
а ещё вопрос: как сделать, чтобы с началом воспроизведения каждой новой анимации запускалась мелодия
if $ARGS[0]=‘artonus’:
cls
CLOSE ALL
if sound = 0:PLAY ‘gifDA/au6ojlum.mp3’,30
gs’stat’
set minut+=5
‘<center><img src=“gifDA\DrAjb.png” ></center>’
‘<center><img src=“gifDA\aji13.gif” ></center>’
end
act ‘Далее’:
cls
set minut+=5
gs’stat’
‘<center><img src=“gifDA\DrAjb.png” ></center>’
‘<center><img src=“gifDA\aji14.gif” ></center>’
act ‘Далее’:gt’wDAi’,’artonusi’
end
сначала пробовал сделать многострочную конструкцию, но в отличии от анимации мелодия не хочет зацикливаться
if $ARGS[0]=‘arto’:
cls
CLOSE ALL
if sound = 0:PLAY ‘gifDA/au6ojlum.mp3’,30
gs’stat’
set minut+=5
‘<center><img src=“gifDA\DrAjb.png” ></center>’
‘<center><img src=“gifDA\aji04.gif” ></center>’
end
act ‘далее’:
cls
set minut+=5
gs’stat’
‘<center><img src=“gifDA\DrAjb.png” ></center>’
‘<center><img src=“gifDA\aji05.gif” ></center>’
act ‘Далее’:
cls
set minut+=5
gs’stat’
‘<center><img src=“gifDA\DrAjb.png” ></center>’
‘<center><img src=“gifDA\aji06.gif” ></center>’
act ‘Далее’:gt’wDA’,’arton’
end
end
но в этом случае мелодия выключается до окончания анимации
Ребят, всем привет. Сорян глубочайший, но мне слегка влом искать в теме…. Словом, меня интересует способ, как можно создать зависимый вариант. Например
имя=1 |
раса=1 | ==> start = 1| ==> доступен выбор “Начать игру”
класс=1|

