[редактировать]

Переход с DevelStudio


О возможностях DevelNext, которых нет в DevelStudio

Общее описание и знакомство с новыми возможностями DevelNext, которых не было в DevelStudio.

Если вы пришли в DevelNext из develstudio, то вам нужно знать о новых механизмах создания программ в этой новой среде программирования.

  1. Поведения - позволяют изменить логику работы с компонентами, похожи на свойства.
  2. События с параметрами - события могут быть навешены с параметром, например на клавишу Enter.
  3. Конструктор событий - визуальное программирование блоками, возможность сконвертировать это все в скрипт.
  4. Игровые возможности - физический 2D движок, спрайты, игровые сцены, клонирование.
  5. Модули - в 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');

Пути, которые начинаются НЕ с символа / или не с названия диска (например С:), считаются относительными.