Основи на езика за програмиране (Language Basics)
Съдържание
Преди да можем да опишем езика за програмиране за двигателя Ren'Py, първо трябва да поговорим за структурата на сценария за визуални романи, създаден с този двигател. Структурата на скрипта включва информация за това как файловете са разделени на блокове от редове и как тези редове са разделени на елементи, които формират изрази.
Файлове [редактиране]
Скриптът на играта Ren'Py се състои от всички файлове, намерени в папката на играта, с разширение.rpy. Ren'Py ще разгледа всеки от тези файлове (в Unicode ред) и ще използва съдържанието на файловете като скрипт.
По правило няма разлика между скрипт, който е разделен на няколко файла, и скрипт, който се състои от един голям файл. Контролът между файловете може да се прехвърля чрез прескачане (инструкцията за прескачане) или извикване на етикет в друг файл. Това прави разделянето на скрипта на файлове въпрос на вкус, тъй като някои разработчици на игри предпочитат малки файлове (напр. един файл за събитие или ден), докато други предпочитат един голям скрипт.
За да ускори времето за зареждане, Ren'Py компилира.rpyфайлове в.rpycфайлове при стартиране. Ако файлът.rpyбъде променен, файлът.rpycще се актуализира при стартиране на Ren'Py. Въпреки това, ако файл.rpycсъществува без съответен .rpy файл, той ще бъде използван. Ако файлът.rpyбъде изтрит без премахване на файла.rpyc, това може да доведе до проблеми,
Базова директория [редактиране]
Базова директория - директорията, съдържаща всички файлове, разпространявани с играта (може също да съдържа някои файлове, които не се разпространяват с играта). Файлове като README трябва да бъдат поставени в основната директория, от която ще бъдат разпространени.
Базовата директория се създава вътреRen'Py директория и е кръстена на вашата игра. Например, ако папката Ren'Py е наречена "renpy-6.11.2" и вашата игра е наречена "HelloWorld", тогава основната директория на тази игра ще бъде "renpy-6.11.2/HelloWorld".
Директория на игри [редактиране]
Директорията на играта почти винаги е папка, наречена "game" в основната директория. Например, ако основната директория е "renpy-6.11.2/HelloWorld", тогава директорията на играта ще бъде "renpy-6.11.2/HelloWorld/game".
Имайте предвид обаче, чеRen'Py търси директории в следния ред:
- Името на изпълнимия файл без разширението. Например, ако изпълнимият файл се нарича moonlight.exe, Ren'Py ще търси папка, наречена moonlight, в основната директория.
- Името на изпълнимия файл без разширение и с премахнат префикс, завършващ на _. Например, ако изпълнимият файл се нарича moonlight_en.exe, Ren'Py ще търси папка с име en.
- Папките "game", "data" и "launcher", в този ред.
Въпреки това, Ren'Py Launcher ще разпознае правилно папките "game" и "data".
Директорията на играта съдържа всички файлове, използвани в играта. Той, включително всички поддиректории, се сканира от Ren'Py за файлове.rpyи.rpycи те се комбинират за създаване на скрипта на играта. Директорията на играта се сканира за.rpaархивни файлове и те се използват автоматично от играта. И накрая, когато играта посочи път към файл за изтегляне, той се зарежда спрямо директорията на играта (но имайте предвид, чеconfig.searchpathможе да промени това).
Коментари [редактиране]
Логически редове [редактиране]
Файлът на скрипта е разделен на логически редове. Във файл логическият ред винаги започва в началото на реда.Логическият низ завършва в края на низа, освен когато:
- Последният знак в низа е обратна наклонена черта.
- Низът съдържа отваряща скоба ( '(' , '' или ']' ).
- Краят на ред се появява в хода на поредица от знаци.
След края на логически ред, следващият логически ред започва в началото на следващия ред.
Повечето изявления на Ren'Py се състоят от един логически ред, докато някои изявления се състоят от множество редове.
Празните булеви низове се игнорират от Ren'Py.
Вдлъбнатини и блокове [редактиране]
Отстъпът е името, което даваме на интервала в началото на всеки логически ред, който се използва за подравняване на Ren'Py изрази. В Ren'Py отстъпът трябва да бъде само интервал.
Отстъпът се използва за групиране на изрази в блокове. Блокът е група от редове и често група от изявления.
Правила за разделяне на файл на блокове:
- Блокът се отваря в началото на файла.
- Нов блок се стартира всеки път, когато логически ред отстъпи от предишния логически ред.
- Всички логически редове в блока трябва да имат еднакъв отстъп.
- Блокът завършва, когато се намери логически ред, който е с по-малък отстъп от редовете в блока.
Отстъпът е много важен за Ren'Py и е причина за синтактични или логически грешки, когато е поставен неправилно. В същото време използването на отстъп за предаване на блоковата структура ни дава възможността да посочим тази структура, без да претоварваме текста на скрипта.
Инициализация (Init) [редактиране]
Операторът init се използва за изпълнение на блокове от операториRen'Py преди стартирането на скрипта. Блоковете за инициализация се използват за дефиниране на изображения и знаци, персонализиране на постоянната структура на данните на играта и персонализиране на Ren'Py. Вътрешният код на блоковете за инициализация не трябва да взаимодейства с потребителя или да променя каквито и да е слоеве, нито трябва да съдържа оператори say, menu, scene, show и hide или да извиква каквато и да е функция, която може да прави горното.
Командата init започва с ключовата думаinit, последвана от незадължителен индикатор за приоритет и задължително двоеточие. Ако не е даден приоритет, по подразбиране той е 0. Указателите за приоритет трябва да варират от -999 до 999. Числата извън този диапазон са запазени от кода на Ren'Py.
Указателят на приоритета се използва за определяне на реда, в който се изпълнява кодът в блока за инициализация. Инициализационните блокове се изпълняват в приоритетен възходящ ред на числата. В рамките на скриптовия файл блоковете за инициализация с еднакъв приоритет се изпълняват в ред от горната част на файла надолу. Редът на оценка на последователността на изпълнение на приоритетни блокове с еднакъв приоритет между скриптовите файлове не е дефиниран.
Инициализационните блокове се изпълняват само веднъж, по време на специална фаза на инициализация. Когато контролата достигне края на такъв блок по време на нормалното изпълнение на кода на скрипта, нейното изпълнение приключва. Ако оператор init възникне по време на нормалното изпълнение на скрипт файл, не се изпълнява такъв блок за инициализация. Вместо това контролът преминава към следващия израз.
Елементи на изявленията [редактиране]
Изявленията на Ren'Py се състоят от няколко основни части:
Синтаксис на общ израз [редактиране]
Повечето оператори Ren'Py споделят общ синтаксис. С изключение на оператора say, изразите започват с ключова дума, която въвежда израза в кода. Ключовата дума е последвана от параметър, ако операторът приема такъв.
Параметърът е последван от едно или повече свойства. Свойствата могат да бъдат зададени в произволен ред, стига всяко свойство да е зададено само веднъж. Имотът започва с ключова дума. За повечето свойства името на свойството е последвано от един от горните синтактични елементи.
Ако операторът включва блок, редът завършва с двоеточие. В противен случай редът просто свършва.
Синтаксис на израза на Python [редактиране]
Много елементи на Ren'Py приемат изрази на Python. Например дефинирането на нов символ включва извикване на функцията Character. Въпреки че изразите на Python са много ефектни, само малка част от функциите са необходими, за да се напише базова игра в двигателя Ren'Py.
Ето бърз преглед на изразите на Python:
Цяло число Цялото число е число без десетична запетая.3и42са цели числа. Реално (реално) число Реално число (съкратено от плаваща запетая) е число с десетична запетая..5,7.,9.0са всички числа с плаваща запетая. Низ (поредица от знаци) Низовете в Python започват с двойни (") или единични (') кавички и завършват със същия знак за кавичка, с който са започнали. Обратната наклонена черта се използва за избягване на знака за край на реда и за въвеждане на специални знаци, като символа за прекъсване на реда. За разлика от низовете в Ren'Py, низовете в Python не могат да бъдат модифицирани. True, False, No value Има три специални стойности.Trueе истинска стойност,Falseе невярна стойност иНямаозначава липса на стойност. Кортеж Кортежите се използват за представяне на контейнери, където броят на елементите е важен. Например, може да се използва двойка (наричана още двойка), за да представи ширина и височина, или четворка (x, y, ширина, височина), за да представи правоъгълник. Кортежите започват с отваряща (лява) скоба, състоят се от нула или повече Python изрази, разделени със запетаи, и завършват с дясна (затваряща) скоба. По изключение единичният кортеж трябва да има запетая след елемента. Например:
Когато четете тази документация, може да забележите сигнатурата на функцията като:
Пример (name, delay, position=(0, 0), **properties) Пример за функция, която всъщност не съществува в Ren'Py, но се използва само в документацията.
- Нарича се Проба.
- Има два позиционни параметъра: име и забавяне. В реална функция типовете на тези параметри ще бъдат ясно посочени в документацията.
- Той има един именуван аргумент, позиция, който има стойност по подразбиране (0,0).
Тъй като функцията завършва с **свойства, това означава, че тя може да приема стилови свойства като допълнителни именувани аргументи. Други специални стойности са *args (което означава, че функцията приема произволен брой позиционни параметри) и **kwargs (което означава, че посочените аргументи са документирани).
Източник [редактиране]
Статия "Основи на езика" на английски език.