Переход с DevelStudio
- О возможностях DevelNext, которых нет в DevelStudio
- Как обращаться к компонентам?
- Чем заменить переменную $self в событии объекта?
- Как добавить невизуальный компонент по типу таймера?
- Чем заменить константу DOC_ROOT?
О возможностях DevelNext, которых нет в DevelStudio
Общее описание и знакомство с новыми возможностями DevelNext, которых не было в DevelStudio.
Если вы пришли в DevelNext из develstudio, то вам нужно знать о новых механизмах создания программ в этой новой среде программирования.
- Поведения - позволяют изменить логику работы с компонентами, похожи на свойства.
- События с параметрами - события могут быть навешены с параметром, например на клавишу Enter.
- Конструктор событий - визуальное программирование блоками, возможность сконвертировать это все в скрипт.
- Игровые возможности - физический 2D движок, спрайты, игровые сцены, клонирование.
- Модули - в develnext все невизуальные компоненты вынесены в отдельные модули, которые надо подключать к формам.
Поведения, behaviours
Эта возможность пришла из конструкторов игр Construct Classic
и Construct 2
. Сама идея в том, что все объекты между собой равны и имеют одинаковые свойства, но для того, чтобы придать объекту новый функционал используют поведения. Почему нельзя просто добавить объекту еще немного свойств, зачем это все выделять в поведения? Во-первых, поведений много, если все это переводить в свойства будет неудобно в этом разбираться, их будет слишком много. Во-вторых, поведения это не совсем свойства, они могут быть более функциональными.
В develnext, например, есть поведение для того, чтобы объект "Мигал", это поведения анимации. А есть поведение для того, чтобы объектом можно было управлять стрелками клавиатуры. И таких поведений очень много.
События с параметрами
Эта возможность пришла из конструктора игр Game Maker
, например, в develstudio вам надо было задать, чтобы при нажатии на клавишу Enter
в поле для ввода открывалась ссылка в браузере. Это приходилось делать вручную, создавать событие на вообще любое нажатие клавиши и уже внутри через условие проверять - какая клавиша была нажата.
В develnext это делается проще, через события с параметрами. В среде вы можете создать индивидуальное событие на нажатие именно клавиши Enter
, любых других клавишь и даже сразу сочетаний клавишь, по типу Ctrl + X
, Alt + ...
и т.д.
Тоже самое относится к событиям столкновения, скроллинга, мышки и некоторым другим, везде есть параметр.
Конструктор событий
Такое есть в Game Maker
и во многих других конструкторах. В develstudio была немного похожая возможность, там были иконки в php редакторе справа, которые позволяли генерировать php код в удобном виде. В develnext тоже есть такие иконки, но они формируют набор действий из блоков, это удобно для начинающих, к тому же всегда можно сконвертировать и посмотреть какой код скрывают эти блоки. К сожалению, обратно сконвертировать код в блоки невозможно.
Игровые возможности
Такого не было в develstudio. Что относится к игровым возможностям в develnext?
- Событие "столкновение" и просчет столкновений
- Игровые события "уничтожение", "клонирование", "выход за пределы" и др.
- Спрайты и спрайтовый редактор, с поддержкой именнованных анимаций.
- Игровые объекты и комнаты, в комнаты можно загружать сцены (другие формы).
- Клонирование объектов, во время выполнения и создание клонов в редакторе.
Все это позволяет реализовать 2D игры разных жанров.
Модули
Если вы пришли из develstudio, тогда представьте, что модуль в develnext это такая же форма, только с набором одних невизуальных компонентов, на нее нельзя добавлять визуальные компоненты по типу кнопок, текстов и т.п.
Вот такой вот модуль можно сформировать из нужных вам таймеров, диалогов и т.д., реализовать там нужную вам логику и подключить к форме или даже к нескольким формам.
Не забывайте, чтобы подключить модуль к форме, есть свойство "Модули" у самой формы.
Как обращаться к компонентам?
Что использовать вместо c("button"), как обращаться к невизуальным компонентам вроде таймера и многое другое.
В develstudio обращение к компонентов происходило через функцию c(), например c("button1"). В develnext это происходит немного иначе.
Простой случай
Например, вам необходимо просто вывести сообщение из поля ввода, в develstudio это делалось так:
$text = c("edit1")->text;
alert($text);
В DevelNext это делается через $this
:
$text = $this->edit1->text;
alert($text);
Сложная ситуация
Иногда возникает ситуация, когда название компонента нужно взять из строки, в DevelStudio с этим у вас не было проблем, вы просто делали например c("button_$index")
. А в develnext это можно сделать так:
$button = $this->{"button_$index"}
Компоненты другой формы
Чтобы обратиться к компоненту из другой формы, в DevelNext необходимо использовать метод ->form()
, например так:
$text = $this->form('Form2')->edit3->text;
Данный код аналогичен коду из develstudio $text = c("Form2->edit3")->text
.
Невизуальные компоненты
В DevelNext все невизуальные компоненты вынесены в модули. К форме подключаются модули вместе со всеми их компонентами. Обращение к компонентам модуля из формы выглядит также как и обычно:
$this->timer->start();
Если у вас есть MainModule
, который подключен к вашей форме, то ко всем его компонентам можно обращаться также как к компонентам формы.
Доступ к визуальным компонентам из модуля
Ситуация аналогичная, если модуль подключен к форме, то из модуля можно обращаться ко всем компонентам его формы также через $this
.
Чем заменить переменную $self в событии объекта?
В develstudio переменная $self указывала на текущий объект события, о том какая замена есть в develnext.
В develnext в каждое событие передается специальный объект в переменной $e
, которая является объектом класса php\gui\event\UXEvent
, через этот объект можно получить объект события:
alert($e->sender->text);
Простыми словами, в develnext полный аналог $self
это $e->sender
.
Как добавить невизуальный компонент по типу таймера?
Статья о невизуальных компонентах в develnext, как их использовать и где добавить.
Используйте модули, например у вас изначально должен быть модуль MainModule
в проекте, в который вы можете добавить сколько угодно таймеров, диалогов и других модульных компонентов. Этот модуль можно подключить к вашей форме через свойство Модули
у самой формы.
Не забывайте подключать модули к форме.
Из формы вам будут доступны все компоненты ее модулей через $this
, а из модуля - все компоненты его форм, тоже через $this
.
Чем заменить константу DOC_ROOT?
Как получить относительный путь к запущенной программе?
В develnext нет похожей константы, но относительный путь программы можно легко получить через сочетание символов ./
:
unlink('./file.txt'); // удаление файла рядом с программой
В общем-то это сочетание не обязательно, и вы можете обращаться к относительным путям программы и без него:
unlink('file.txt');
Пути, которые начинаются НЕ с символа
/
или не с названия диска (напримерС:
), считаются относительными.