Строка 1: |
Строка 1: |
− | Глава 1: Встречайте Dream Maker | + | ''Это 1 глава перевода оригинального руководства по Dream Maker от разработчиков.'' |
| + | |
| + | [http://wiki.ss13.ru/index.php?title=All_about_the_code Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.] |
| + | |
| + | [http://www.byond.com/docs/guide/chap01.html Оригинальная 1 глава руководства на английском языке] |
| + | |
| + | =Глава 1: Встречайте Dream Maker= |
| | | |
| ''The first step to mastery in the lands of sleep is the realization, without waking, that one dreams. In the day worlds, mastery begins by forgetting, without dreaming, that one is awake.'' -- DoD1 | | ''The first step to mastery in the lands of sleep is the realization, without waking, that one dreams. In the day worlds, mastery begins by forgetting, without dreaming, that one is awake.'' -- DoD1 |
Строка 33: |
Строка 39: |
| '''1.''' Создадим проект «Hello», выбором строчки '''New environment''' в пункте меню '''Filе'''. Это ведёт к созданию директорию, где будет размещаться ваш проект. Создадим новую диекторию, с названием “''Hello''”, где будет находится environment-файл “''Hello.dme''”. Обратите внимание, “''hello.dme''” так же появился в дереве файлов (''file-tree'') в левой части экрана. Все environment-файлы директории будут отображаться здесь. | | '''1.''' Создадим проект «Hello», выбором строчки '''New environment''' в пункте меню '''Filе'''. Это ведёт к созданию директорию, где будет размещаться ваш проект. Создадим новую диекторию, с названием “''Hello''”, где будет находится environment-файл “''Hello.dme''”. Обратите внимание, “''hello.dme''” так же появился в дереве файлов (''file-tree'') в левой части экрана. Все environment-файлы директории будут отображаться здесь. |
| | | |
− | '''2.''' Давайте поместим код этого проекта в отдельный файл. Выберите '''New file''' из пункта меню '''File'''. Выберите '''Code file'' как тип для создаваемого файла и назовите его “''Hello''”. Создастся новый файл под названием “''Hello.dm''” В директории проекта и соответствующей пункт в дереве файлов. Флажок рядом с ним указывает, что код в “''Hello.dm''” будет включён в проект. | + | '''2.''' Давайте поместим код этого проекта в отдельный файл. Выберите '''New file''' из пункта меню '''File'''. Выберите '''Code file''' как тип для создаваемого файла и назовите его “''Hello''”. Создастся новый файл под названием “''Hello.dm''” В директории проекта и соответствующей пункт в дереве файлов. Флажок рядом с ним указывает, что код в “''Hello.dm''” будет включён в проект. |
| | | |
| '''3.''' Теперь “''Hello.dm''” готов к редактировании. Введите следующий код. ''Убедитесь, что первая строка без отступа, вторая с отступом, а третья с двумя отступами. Для этой цели используйте клавишу Tab или пробелы.'' | | '''3.''' Теперь “''Hello.dm''” готов к редактировании. Введите следующий код. ''Убедитесь, что первая строка без отступа, вторая с отступом, а третья с двумя отступами. Для этой цели используйте клавишу Tab или пробелы.'' |
Строка 120: |
Строка 126: |
| Несколько свойств были добавлены. Имя свойство пишется в левой части, а значение, которое оно принимает, в правой. В случае с картинками (''icons''), значением является имя файла записанное в одинарных кавычках. В случае с ''плотностью'' (destinity), значение должно быть 0 либо 1. При значение 1, объект не позволит через себя пройти другим объектам с свойством ''destiny'' равным 1. | | Несколько свойств были добавлены. Имя свойство пишется в левой части, а значение, которое оно принимает, в правой. В случае с картинками (''icons''), значением является имя файла записанное в одинарных кавычках. В случае с ''плотностью'' (destinity), значение должно быть 0 либо 1. При значение 1, объект не позволит через себя пройти другим объектам с свойством ''destiny'' равным 1. |
| | | |
− | ==Раздел 2.== | + | ==Захватывающее создание карты== |
| | | |
| + | Для большинство программ, добавление графической поддержки, это тяжёлый труд. Однако возможности Dream Maker, делают эту задачу значительно проще. В нашем примере, мы просто нарисуем пару иконок и разместим их на карте. |
| | | |
− | Для большинство программ, добавление графической поддержки, это тяжёлый труд. Однако возможности Dream Maker, делает эту задачу значительно проще. В нашем примере, мы просто нарисуем пару иконок и разместим их на карте.
| + | '''1.''' Создайте новый проект “''maze''” через пункт меню '''New environment'''. |
| + | '''2.''' Создайте основной файл “''maze .dm''” и внесите туда код: |
| | | |
− | 1. Создайте новый проект “maze” через пункт меню “New environment”.
| + | turf |
− | 2. Создайте основной файл “maze .dm” и внесите туда код:
| + | floor |
− | turf | + | icon = 'floor.dmi' |
− | floor
| + | wall |
− | icon = 'floor.dmi'
| + | icon = 'wall.dmi' |
− | wall
| + | density = 1 |
− | icon = 'wall.dmi'
| + | mob |
− | density = 1
| + | icon = 'player.dmi' |
− | mob | |
− | icon = 'player.dmi'
| |
− | 3. Создайте “floor.dmi”. нажмите на пункт меню New file и в выпадающем меню выберите Icon File. Откроется новое окно для создания пиксельных рисунков (статичных, иконок, не направленных картинок) и анимационных или направленных картинок. Выберите New Pixmap из меню Graphic и используя всё своё умение художника нарисуйте картинку пола. Повторите эти шаги для wall.dmi и player.dmi.
| |
− | 4. С тремя нашими картинками, проект должен скомпилироваться. Протестируем, нажав пункт Compile. Если все прошло гладко, вы должны увидеть свои иконки в дереве объектов в левом окне экрана. Это дерево показывает определённые объекты в вашем Мире.
| |
− | 5. Вы можете запустить ваш Мир, но не сможете увидеть никакую из картинок потому что мы ещё их пока не разместили на карте. Для постройки карты, снова нажмите New File и выберите Map file. Назовите как посчитаете нужным. К имени добавиться .dmm указывая что это файл - карта.
| |
− | 6. Теперь весёлая часть! Создайте свою карту, размещая картинки из вашего дерева объектов в произвольном порядке. К примеру, постройте ряд стен, выбрав функцию Add на панели кнопок, нажмите на Wall в дереве объектов (Wall располагается в выпадающем дереве Turf), и разместите их на карте , просто нажимая левой кнопкой по ней. Для удаления используйте правую кнопку. Редактор карт имеет много возможностей, изучить из вы можете прочитав прилагающуюся документацию.
| |
− | 7. Скомпилируйте новый, уже графический проект и запустите в Dream Seeker. Если всё было сделано правильно, вы увидите свой проект на экране. Ваш аватар может ходить по этому полу и ударяться головой об эти стены. Не так плохо для нескольких минут работы!
| |
| | | |
− | Причина по которой мы не добавили floor в свойствах бесплотность (destiny=0), в том что turf уже имеет по умолчанию destiny = 0. Так как floor является потомком turf, он наследует все свойства родителя, как и это. Этот вид ориентации свойств один из главных элементов объектно-ориентированных языков как DM. В конечном счёте, это просто компактный способ описания связей между родственными объектами.
| + | '''3.''' Создайте “''floor.dmi''”, выбрав пункт меню '''New file''' и в выпадающем меню нажмите '''Icon File'''. Откроется новое окно для создания пиксельных, анимационных или направленных картинок. Выберите '''New Pixmap''' из меню '''Graphic''' и используя всё своё умение художника нарисуйте картинку пола. Повторите эти шаги для ''wall.dmi'' и ''player.dmi''. |
| | | |
− | Перед тем как проверить этот пример, вы должны нарисовать иконки и построить из них лабиринт.
| + | '''4.''' С тремя нашими картинками, проект должен скомпилироваться. Проверим, нажав пункт '''Compile'''. Если все прошло гладко, вы должны увидеть свои иконки в дереве объектов в левом окне экрана. Это дерево показывает определённые объекты в вашем '''Мире'''. |
| | | |
− | После завершения постройки карты, вы сможете скомпилировать и протестировать Мир. Когда вы зайдёте в систему, вы сможете пройтись по вашему лабиринту использую клавиши стрелок. Невероятно!
| + | '''5.''' Вы можете запустить ваш '''Мир''', но не сможете увидеть никакую из картинок потому что мы ещё их пока не разместили на карте. Для постройки карты, снова нажмите '''New File''' и выберите '''Map file'''. Назовите как посчитаете нужным. К имени добавиться ''.dmm'' указывая что этот файл - карта. |
| | | |
− | Конечно же осталась одна небольшая деталь, о которой пока никто не думал. Где же всё таки начало лабиринта? Мы никогда не задумывались и игрок просто ставился на карту в первую возможную точку. Вот пример как это исправить:
| + | '''6.''' Теперь самая весёлая часть! Создайте свою карту, размещая картинки из вашего дерева объектов в произвольном порядке. К примеру, постройте ряд стен, выбрав функцию '''Add''' на панели кнопок, нажмите на ''Wall'' в дереве объектов (''Wall'' располагается в выпадающем дереве ''Turf''), и разместите их на карте , просто нажимая левой кнопкой по ней. Для удаления используйте правую кнопку. Редактор карт имеет много возможностей, изучить из вы можете прочитав прилагающуюся документацию. |
| | | |
− | turf
| + | '''7.''' Скомпилируйте новый, уже графический проект и запустите в ''Dream Seeker''. Если всё было сделано правильно, вы увидите свой проект на экране. Ваш аватар может ходить по этому полу и ударяться головой об эти стены. Не так плохо для нескольких минут работы! |
− | floor
| |
− | icon = 'floor.dmi'
| |
− | start
| |
− | icon = 'start.dmi'
| |
− | wall
| |
− | icon = 'wall.dmi'
| |
− | density = 1
| |
− | mob
| |
− | icon = 'player.dmi'
| |
− | Login()
| |
− | loc = locate(/turf/start)
| |
| | | |
− | Теперь вам необходимо нарисовать ещё одну иконку start и разместить её в начале вашего лабиринта.
| + | Причина по которой мы не убрали ''floor'' в свойствах плотность ("''destiny = 0''"), в том что ''turf'' уже имеет по умолчанию "''destiny = 0''". Так как ''floor'' является потомком ''turf'', он наследует все свойства родителя. Этот вид наследования свойств один из главных элементов объектно-ориентированных языков, к которым относится DM. В конечном счёте, это просто компактный способ описания связей между родственными объектами. |
| | | |
− | Команда loc, которая производит размещение игроков (mobs), входит в группу procs. Она указывает начальное местоположение mob на блоке start. Это достигается использование инструкции location() , одной из множества встроенных процедур в DM. Оно вычисляет начальное положение некоторого объекта (в данном случае на блоке start).
| + | Перед тем как рассматривать пример, вы должны нарисовать иконки и построить из них лабиринт. |
| | | |
− | Обратите внимание как был указан объект /turf/start. Такая запись называется type path, из-за способа указания пути (начиная с корневого объекта, в нашем случае turf) до необходимого объекта.
| + | После завершения постройки карты, вы сможете скомпилировать и протестировать '''Мир'''. Когда вы зайдёте в систему, вы сможете пройтись по вашему лабиринту используя клавиши стрелок. Невероятно! |
| | | |
− | Теперь представим что вы забыли разместить объект Start на карте. Что произойдёт? Инструкция locate() станет ошибочной, и игрок не будет размещен на карту и следовательно не сможет увидеть лабиринт когда зайдёт в систему. Это станет катастрофой! Было бы не плохо, вернуться на пару шагов назад и разместить где-нибудь mob на карте? Другими словами, мы должны запустить процесс входа Login по умолчанию и так же созданный нами для объекта start, на всякий случай. Вот как это сделать:
| + | Конечно же осталась одна небольшая деталь, о которой пока никто не думал. Где же всё таки начало лабиринта? Мы никогда не задумывались, а игрок просто появляется на карте в первой возможной точке. Вот пример, как это можно исправить: |
| | | |
− | mob | + | turf |
− | Login()
| + | floor |
− | loc = locate(/turf/start)
| + | icon = 'floor.dmi' |
− | ..()
| + | start |
| + | icon = 'start.dmi' |
| + | wall |
| + | icon = 'wall.dmi' |
| + | density = 1 |
| + | mob |
| + | icon = 'player.dmi' |
| + | Login() |
| + | loc = locate(/turf/start) |
| + | |
| + | Теперь вам необходимо нарисовать ещё одну иконку ''start'' и разместить её в начале вашего лабиринта. |
| + | |
| + | Команда ''loc'', которая производит размещение игроков (''mobs''), входит в группу ''procs''. Она указывает начальное местоположение ''mob'' на блоке ''start''. Это достигается использование инструкции ''location()'', одной из множества встроенных процедур в DM. Оно вычисляет начальное положение некоторого объекта (в данном случае на блоке ''start''). |
| + | |
| + | Обратите внимание как был указан объект ''/turf/start''. Такая запись называется ''type path'', из-за способа указания пути (начиная с корневого объекта, в нашем случае ''turf'') до необходимого объекта. |
| + | |
| + | Теперь представим что вы забыли разместить объект ''Start'' на карте. Что произойдёт? Инструкция ''locate()'' станет ошибочной, и игрок не будет размещен на карту и следовательно не сможет увидеть лабиринт когда зайдёт в систему. Это станет катастрофой! Было бы не плохо, вернуться на пару шагов назад и разместить где-нибудь ''mob'' на карте? Другими словами, мы должны запустить процесс входа ''Login'' по умолчанию и так же созданный нами для объекта ''start'', на всякий случай. Вот как это сделать: |
| | | |
− | Всю работу выполняет последняя строка. Запускается процедура со странным именем: две точки. Это имя DM использует для описания процедур по умолчанию, более известная как родительская или суперпроцедура. То есть процедура Login проверяет наличие на карте mob, если его нет, то размещает его на любое доступное место. Это именно то что мы хотели получить.
| + | mob |
| + | Login() |
| + | loc = locate(/turf/start) |
| + | ..() |
| | | |
− | Теперь вы можете ощутить общее впечатление от программирование на DM. Есть ряд событий (Login один из них), которые обрабатываются процедурами. В необходимости вы можете заменить процедуру по умолчанию на свою собственную, что бы всё работали именно как вы хотели.
| + | Всю работу выполняет последняя строка. Запускается процедура со странным именем: две точки. Это имя DM использует для описания процедур по умолчанию, более известная как родительская или суперпроцедура. То есть процедура ''Login'' проверяет наличие на карте ''mob'', если его нет, то размещает его на любое доступное место. Это именно то что мы хотели получить. |
| | | |
− | Это ещё один важный момент объектно-ориентированного программирования. Каждый тип объекта может реагировать на события по разному. Так он может реагировать как его родитель по умолчанию , либо добавить дополнительные меры по необходимости.
| + | Теперь вы можете ощутить общее впечатление от программирование на DM. Есть ряд событий (''Login'' один из них), которые обрабатываются процедурами. В необходимости вы можете заменить процедуру по умолчанию на свою собственную, что бы всё работало именно как вы хотели. |
| | | |
− | Это введение только поверхностно охватывает DM. Теперь вы можете видеть открывшиеся для вас возможности. И в тоже время , у вас появились множество вопросов. Держите это при себе, они станут проводником для вас к более подробному изучению языка DM. | + | Это ещё один важный момент объектно-ориентированного программирования. Каждый тип объекта может реагировать на события по разному. Так он может реагировать как его родитель по умолчанию, либо добавить дополнительные меры по необходимости. |
| | | |
− | Раздел 3.
| + | Это введение только поверхностно охватывает DM. Теперь вы можете видеть открывшиеся для вас возможности. И в тоже время, у вас появилось множество вопросов. Держите их при себе, они станут проводником для вас к более подробному изучению языка DM. |
| | | |
− | Ни один из языков программирования не обходится без справки. Dream Maker предоставляет это в виде поиска разделов и прилагающейся документации. Получить доступ вы можете нажав клавишу F1 или на пункт меню Help. Если курсор находится над словом (к примеру locate), справка автоматически найдёт раздел таким именем.
| + | ==Помощь в пути!== |
| | | |
− | Примечание переводчика:
| + | Ни один из языков программирования не обходится без справки. Dream Maker предоставляет её в виде поиска разделов и прилагающейся документации на английском языке. Получить доступ вы можете, нажав клавишу '''F1''' или на пункт меню '''Help'''. Если курсор находится над словом (к примеру ''locate''), справка автоматически найдёт раздел таким именем. |
− | 1 – У меня плохо с литературным английским, не смог перевести.
| |
− | 2- Опущен перевод текста. Оригинал: The sheer weight of their ignorance keeps the jargon from flipping right side up, and we are stuck with trees having a root at the top and leaf nodules at the bottom. Or it might just be standard obfuscation. That's why I do it.
| |
− | 3 – в последующим ориг. текст изобилует такими понятиями как wall turf или start turf. Это указывает принадлежность объектов wall, start и т.п. к turf. Но перевод turf как прилагательного очень затруднителен и я стал использовать иногда вместо него слово «блок».
| |