RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424120 views

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"]
Aleks Versus Moderator 22.10.2015 07:42 (10 years ago)

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-шная:

  • добавление/удаление случайных предметов в массив/из массива;
  • выдача случайных значений/параметров для предметов в массивах;
  • возможность изменения значений/параметров у предмета, в зависимости от выбора;
  • возможность взаимодействия с выбранным предметом массива; Если кто-то уже имел с этим дело, был бы очень признателен если-бы объяснили! Я сейчас очень туплю на этом моменте.
Aleks Versus Moderator 27.10.2015 09:23 (10 years ago)

Aaaspavel,
обрати свой взор на Quest Navigator.
применительно к “классическому” плееру:
1. Думаю отцентрировать по вертикали без участия игрока не получится
2. Есть на форуме тема действия по таймеру. А может быть даже есть пример в разделе для разработчиков. В принципе, если подумать, зная точно время проигрывания анимации до миллисекунд, можно сделать подмену анимированной картинки статичной (и наоборот). Однако, боюсь, что на разных устройствах скорость проигрывания gif’ов слегка отличается.
3. Растягивание картинок по ширине (и по высоте вроде как) присутствует.

Aleks Versus Moderator 27.10.2015 09:30 (10 years ago)

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
но в этом случае мелодия выключается до окончания анимации

Юрий Александрович Романов #1564 28.10.2015 10:06 (10 years ago)

Ребят, всем привет. Сорян глубочайший, но мне слегка влом искать в теме…. Словом, меня интересует способ, как можно создать зависимый вариант. Например

имя=1 |
раса=1 | ==> start = 1| ==> доступен выбор “Начать игру”
класс=1|

Aleks Versus Moderator 28.10.2015 11:14 (10 years ago)

Юрий Александрович Романов,
не понимаю, что конкретно нужно. Чтобы соблюдались все три условия, и стало доступно действие “Начать игру”?

if имя=1 and раса=1 and класс=1:
   act 'Начать игру':
     start = 1
     !goto 'start'
   end
end

Или посложнее

act 'Начать игру':
   if имя <> 1:
      *pl 'Вы не выбрали имя.'
   elseif раса <> 1:
      *pl 'Вы не выбрали расу.'
   elseif класс <> 1:
      *pl 'Вы не выбрали класс.'
   else
      start = 1
      !goto 'start'
   end
end
Юрий Александрович Романов #1564 28.10.2015 13:40 (10 years ago)

Спасибо за варианты, пока сойдет, но…
Вот что я хочу видеть
Игрок выбирает Имя, расу, класс, после этого появляется отдельное действие “Поехали”, например, и дальше начинается игра.
Как сделать, чтобы это самое действие появилось ТОЛЬКО после выполнения условия?

Log in or Register to post comments.