Инструменты пользователя

Инструменты сайта


help:jump

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:jump [2015/04/07 08:16]
104.173.64.4 95vWEQIm75P
help:jump [2024/10/14 11:42] (текущий)
aleks_versus
Строка 1: Строка 1:
-Fiinndg this post has solved my problem http://iifeodeol.com [url=http://uwfnsma.com]uwfnsma[/url] [link=http://ldmqiuey.com]ldmqiuey[/link]+[[help:organizing|Назад:​ Пользовательские функции и процедуры]] 
 + 
 +====== Переходы внутри локации ====== 
 + 
 +Иногда нам требуется пропустить выполнение определённого участка кода на локации,​ или вернуться к выполнению уже выполненного участка кода. Для таких случаев в QSP предусмотрен механизм переходов по локальным меткам. 
 + 
 +В общем виде метки выглядят так: 
 + 
 +<sxh qsp> 
 +:​[название метки] 
 +</sxh> 
 + 
 +, где ''​%%[название метки]%%''​ — теоретически любое сочетание символов,​ однако на практике желательно использовать лишь буквы, цифры, символы подчёркивания и пробелы. Перед двоеточием могут стоять символы пробелов и табуляции в любом количестве. Так же игнорируются прилегающие к названию метки символы пробелов и табуляций (однако ставить их не рекомендуется для удобства чтения кода). 
 + 
 +Иными словами,​ чтобы поставить метку, вам нужно на отдельной строке поставить двоеточие и после двоеточия написать названия метки. 
 + 
 +<sxh qsp> 
 +! пример метки 
 +:​cycle_end 
 +</sxh> 
 + 
 +После названия метки можно поставить ''​%%&​%%''​ и написать какие-нибудь операторы,​ однако делать так не рекомендуется. 
 + 
 +<sxh qsp> 
 +! допустимо,​ но не рекомендуется 
 +:метка & *pl "​Строка текста"​ 
 +</sxh> 
 + 
 +Метки не должны повторяться внутри отдельного блока кодаЕсли внутри блока кода будут стоять одинаковые метки, плеер будет работать только с самой первой меткой,​ все остальные повторяющиеся метки он проигнорирует. 
 + 
 +Названия меток не чувствительны к регистру. То есть метки с названиями "​конец"​ и "​КОНЕЦ"​ — это повторяющиеся метки. 
 + 
 +Метки локальны для отдельных блоков кода. То есть вы можете использовать одинаковые метки в разных блоках кода; например,​ на разных локациях. 
 + 
 +Отдельными блоками кода считаются:​ 
 + 
 +  * Код "​Выполнить при посещении"​ любой локации. Каждая локация - это отдельный блок кода. 
 +  * Код действия,​ даже если действие добавлено с помощью оператора ''​%%ACT%%''​. 
 +  * Код в html-ссылке (см. подраздел "​Код в гиперссылках"​ раздела **[[help:​html|HTML]]**). 
 +  * Код ''​%%DYNAMIC%%''​/''​%%DYNEVAL%%''​ 
 + 
 +Для перемещения ("​прыжка"​) к меткам используется оператор ''​%%JUMP%%'':​ 
 + 
 +''​%%JUMP [$метка]%%''​ - переход в текущем блоке кода на метку с названием ''​%%[$метка]%%''​. 
 + 
 +Пример:​ 
 + 
 +<sxh qsp> 
 +jump '​КонеЦ'​ 
 +p '​Это сообщение не будет выведено'​ 
 +:​конец 
 +p 'А это сообщение пользователь увидит'​ 
 +</​sxh>​ 
 + 
 +**Обратите внимание!** Код действия,​ добавленного с помощью оператора ''​%%ACT%%'',​ является отдельным блоком кода, только когда мы нажимаем на действие. Из локации,​ на которой размещено создаваемое с помощью оператора ''​%%ACT%%''​ действие,​ мы по прежнему можем "​прыгнуть"​ на метку внутри этого действия. 
 + 
 +Пример:​ 
 + 
 +<sxh qsp> 
 +:​метка_на_локации 
 +jump '​метка_в_действии'​ & ! отсюда мы можем прыгнуть в код действия 
 + 
 +act "​Действие":​ 
 +    ! а из действия мы не можем прыгнуть на локацию 
 +    jump '​метка_на_локации'​ 
 +    :​метка_в_действии 
 +end 
 +</​sxh>​ 
 + 
 +===== Циклы ===== 
 + 
 +В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела,​ потому что есть специальный оператор ''​%%LOOP%%'',​ предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями,​ поэтому здесь мы приводим примеры таких устаревших циклов,​ и примеры новых циклов,​ которые следует использовать. 
 + 
 +Устаревший цикл для вывода чисел с 1 по 9: 
 + 
 +<sxh qsp> 
 +s=0 
 +:loop 
 +if s<9: 
 +    s=s+1 
 +    pl s 
 +    jump '​loop'​ 
 +end 
 +p '​Всё!'​ 
 +</sxh> 
 + 
 +Тот же цикл с использованием оператора ''​%%LOOP%%'':​ 
 + 
 +<sxh qsp> 
 +loop s=0 while s<9: 
 +    s+=1 
 +    pl s 
 +end 
 +p '​Всё!'​ 
 +</sxh> 
 + 
 +Устаревший двойной цикл с одной меткой:​ 
 + 
 +<sxh qsp> 
 +:loop 
 +if y<y0: 
 +    if x<x0: 
 +        ! тело цикла, код 
 +        x=x+1 
 +        jump '​loop'​ 
 +    end 
 +    y=y+1 
 +    x=0 
 +    jump '​loop'​ 
 +end 
 +</​sxh>​ 
 + 
 +Тот же двойной цикл с оператором ''​%%LOOP%%'':​ 
 + 
 +<sxh qsp> 
 +loop y=0 while y<y0 step y+=1: 
 +    loop x=0 while x<x0 step x+=1: 
 +        ! тело цикла, код 
 +    end 
 +end 
 +</​sxh>​ 
 + 
 +Несмотря на то, что метки больше не используются для написания циклов,​ они могут быть очень полезны,​ если вам нужно досрочно прервать выполнение циклаНапример,​ вот цикл, проверяющий,​ присутствуют ли в двух массивах ''​%%$a%%''​ и ''​%%$b%%''​ одинаковые элементы:​ 
 + 
 +<sxh qsp> 
 +loop local i,​size=0,​arrsize('​$a'​) while i<size step i+=1: 
 +    if arrpos('​$b',​$a[i])<>​-1:​ 
 +        *pl 'В массивах есть одинаковые элементы'​ 
 +        jump '​cycle_end'​ & ! ранний выход из цикла 
 +    end 
 +end 
 +*pl 'В массивах нет одинаковых элементов'​ 
 +:​cycle_end 
 +</sxh> 
 + 
 +[[help:​service_locations|Вперёд:​ Служебные локации]] 
help/jump.1428394569.txt.gz · Последние изменения: 2015/04/07 11:16 (внешнее изменение)