Руководство пользователя - C # / VB Scripts

  1. Редактор скриптов
  2. Структура скрипта
  3. Доступ к свойствам
  4. Расширенные сценарии
  5. автоматизация
  6. Регистрация сообщений
  7. Отладка с помощью внешнего отладчика

Хотя некоторые довольно сложные сцены могут быть созданы с использованием существующих Функциональность узла Есть определенные эффекты, которые не могут быть достигнуты простым использованием Узлы и привязки , В других случаях проще добавить небольшой фрагмент кода в сцену Ventuz, который выполняет дополнительные вычисления, чем реализовать эту функциональность через узлы.

Каждый узел Script предоставляет три свойства параметров компилятора . Эти свойства влияют на результат внутреннего вывода компилятора и не могут быть связаны. Компилятор создает DLL из исходного кода и динамически связывает ее с основным приложением Ventuz. Свойство Platform указывает, какая версия Ventuz может связывать полученную DLL. Если для свойства установлено значение AnyCPU , полученная DLL может быть связана с 32-битным и 64-битным Ventuz. Что еще более важно, скрипт может связать все библиотеки DLL, которые там собираются, с AnyCPU, а также с версией текущего запущенного приложения Ventuz. Если для Platform установлено значение Current , в сценарии могут использоваться только те библиотеки DLL с битовой версией работающего приложения Ventuz.

32-битный Ventuz не может использовать 64-битные DLL, а 64-битный Ventuz не может использовать 32-битные DLL в узлах Script!

Свойство Optimized указывает, должен ли компилятор выполнять оптимизацию кода для результирующей DLL.
Свойство UnsafeCode определяет, разрешено ли ключевое слово unsafe и, следовательно, операции с указателями в исходном коде сценария C #. Visual Basic .Net не поддерживает небезопасный код.

Каждому узлу Script автор может дать ряд дополнительных свойств ввода и вывода через Пользовательская модель механизм. Каждое из этих свойств отражено в исходном коде скрипта, обеспечивая тем самым связь между исходным кодом и сценой Ventuz.

После загрузки сцены каждый узел сценария должен скомпилировать свой исходный код в выполняемые операции. Большое количество сценариев в сцене может значительно увеличить время загрузки этой сцены!

Редактор скриптов

При двойном щелчке по узлу сценария открывается редактор сценариев. Окно стыковки слева показывает входные и выходные свойства, добавленные к этому узлу автором сценария. При нажатии кнопки добавления можно создавать новые свойства для значений с плавающей запятой, строк, методов и т. Д. Окно док-станции также содержит вкладку для отображения ссылок на сборки (т.е. библиотеки DLL), которые можно использовать в сценарии.

Основная область редактора скриптов, конечно же, связана с исходным кодом. Редактор предлагает множество удобств профессиональных IDE, таких как подсветка контекста и автозаполнение . При изменении кода редактор сценариев пытается обнаружить синтаксические ошибки на лету и перечисляет их в списке ошибок в нижней части редактора сценариев.

При изменении кода редактор сценариев пытается обнаружить синтаксические ошибки на лету и перечисляет их в списке ошибок в нижней части редактора сценариев

Код также можно явно скомпилировать, нажав кнопку « Компилировать» в строке меню в верхней части редактора сценариев. Чтобы иметь возможность выполнить скрипт, код должен компилироваться без ошибок.

Редактор сценариев обычно неплохо справляется с обнаружением проблем. Однако есть ошибки, которые подсветчик синтаксиса не сможет обнаружить, но компилятор сделает это. Не думайте, что только из-за того, что подсветка синтаксиса не обнаруживает ошибок, их нет!

При нажатии Save & Close изменения будут сохранены, код скомпилирован, а редактор закрыт.

Структура скрипта

Когда узел сценария перетаскивается на Редактор контента , скелет исходного кода, который содержит все обязательные функции-члены, генерируется автоматически. Далее будет обсуждаться только код сценария C #, версия Visual Basic точно такая же, за исключением очевидных языковых различий.

используя Систему; используя Ventuz.Kernel; открытый класс Script: ScriptBase, System.IDisposable {// Этот элемент указывает, должен ли метод Generate () возвращать значение true или false. // Если выходные значения этого скрипта изменяются, Generate () должен возвращать true, чтобы // запустить проверку узлов, связанных с выходными значениями этого скрипта. изменен приватный бул; // Этот метод вызывается, если компонент загружен / создан public Script () {} // Этот метод вызывается, если компонент выгружен / удален public virtual void Dispose () {} // Этот метод вызывается, если входное свойство изменил свое значение public override void Validate () {} // Этот метод вызывается каждый раз перед визуализацией фрейма public override bool Generate () {// возвращает true, если выходные значения были изменены, если (change) {change = ложный; вернуть истину; } вернуть ложь; }}

Для содержания следующего обсуждения предполагается, что читатель знаком с понятиями Привязки и проверка а также с самим языком программирования C #.

Любой читатель, владеющий C #, должен быть знаком с концепциями конструирования и утилизации. Конструктор (т. Е. Script ()) вызывается при создании узла (обычно как часть загрузки сцены), а Dispose () вызывается при разрушении узла (обычно как часть закрытия сцены). Ответственность за удаление неуправляемых ресурсов и закрытие критических ресурсов, таких как дескрипторы файлов или сетевые сокеты, лежит на методе Dispose. Для получения дополнительной информации, пожалуйста, обратитесь к документации MSDN о сборке мусора в целом и утилизации в частности.

Однако методы Validate () и Generate () напрямую отражают способ стандартные узлы Ventuz реализуются внутри страны. Поскольку повторное выполнение функциональности узлов в каждом кадре слишком дорого для приложений реального времени (представьте себе узел сетки, выделяющий свою память и пересчитывающий позиции вершин в каждом кадре), узел должен выполнять столько вычислений, сколько реагирует на изменение входных свойств . Пока входные свойства сохраняют одинаковые значения, нет необходимости выполнять какие-либо вычисления. Единственным исключением являются такие узлы, как Узел перемещения которые реагируют на прогрессирование времени, другие узлы, которые реагируют на внешние источники информации.

Для поддержки этого механизма «кэширования» метод сценариев Validate () вызывается всякий раз, когда изменяется одно из входных свойств. Это место для выполнения большинства вычислений и обновления выходных значений или сохранения результатов во внутренних переменных.

Напротив, метод Generate () вызывается каждый кадр , поэтому вычисления должны быть сведены к минимуму. Однако есть одна очень важная задача, которую должен выполнить Generate () - заставить узлы, связанные с выходными свойствами сценариев, проверять себя . Присвоение значения выходному свойству скрипта только изменит значение, но не вызовет привязанный узел метода Validate (). Если метод Generate () не вернет true, связанные узлы не будут признаны недействительными.

Значения выходных свойств могут быть обновлены в любом месте скрипта, включая метод Validate (). Однако свойства, связанные с этими выходными данными, уведомляются об изменении только тогда, когда метод Generate () возвращает true.

Очевидно, что метод Generate () должен возвращать true только тогда и только тогда, когда выходные свойства значений действительно изменились, по тем же соображениям производительности, что и выше. Скелет скрипта поэтому объявил логическое имя с именем change. Если метод Validate () обновляет выходные свойства, он просто должен установить для параметра change значение true, и реализация Generate () по умолчанию будет работать правильно.

Доступ к свойствам

Свойства ввода и вывода, которые были добавлены в узел «Сценарий» через диалоговое окно «Пользовательская модель», доступны из кода сценария по их именам (с учетом регистра). Если было добавлено входное свойство Amount и выходное свойство Sum, код сценария может выглядеть следующим образом:

public override void Validate () {// Считать значение входного свойства float len1 = this.Amount; // Делаем некоторую произвольную логику или код (здесь мы проверяем, если // входная переменная больше 12) if (len1> 12.0f) {// Назначаем новое значение для вывода. this.Sum = len1 * 10; // Установить изменено на true, чтобы Generate возвращал true во время // следующего вызова. изменено = верно; }}

Выходные свойства типа Array не могут быть установлены компонентно! Полный массив должен быть установлен одновременно. Например: MyFloats_out [8] = 2.3f; не возможно и приводит к ошибке компилятора!

Добавление свойства Input Method к сценарию, а затем двойной щелчок по записи создаст объявление метода с именем свойства с добавленным префиксом On. Если добавлен сброс метода ввода, соответствующий метод в коде сценария называется OnReset (). Для запуска событий, которые были добавлены через пользовательскую модель, имя события должно вызываться из кода скрипта. Чтобы активировать событие, код сценария должен выглядеть следующим образом:

public override bool Generate () {// ... некоторый произвольный код перед вызовом Activate (); // ... некоторый произвольный код после вызова}

Обратите внимание, что методы и события могут получать и отправлять целочисленные аргументы, например, код события Activate может выглядеть следующим образом: Activate (12).

Расширенные сценарии

Хотя можно использовать внешние библиотеки DLL или динамически загружать сборки .net с помощью языковых конструкций C # (P / Invoke; .Net Reflection), редактор сценариев предоставляет возможность выбирать внешние библиотеки DLL .Net и использовать их внутри скрипта. Чтобы добавить внешние библиотеки DLL, перейдите в раздел « Ссылки » редактора сценариев и нажмите Хотя можно использовать внешние библиотеки DLL или динамически загружать сборки в папке сборок GAC . Нажатие Добавить ссылки откроет браузер для выбора внешних DLL. Чтобы удалить DLL, нажмите на нем и выберите Удалить ссылку .

Только сборки .Net, которые зарегистрированы в глобальном кэше сборок (GAC), могут быть добавлены в список сборок GAC !

Если внешняя настраиваемая DLL была обновлена ​​и на нее ссылаются из сценария, необходимо перезапустить Ventuz, чтобы убедиться, что сценарий ссылается на новейшую версию внешней DLL, и изменения были приняты во внимание.

автоматизация

Помимо чтения и записи свойств ввода и вывода самого узла Script, можно загружать сцены и ресурсы, настраивать загруженные сцены и деактивировать их ScenePorts ,
Скрипт предоставляет доступ к Данные сцены свойства и методы и позволяет устанавливать входные свойства, читать выходные свойства и методы запуска. Все не заблокированные и не связанные ScenePorts также могут быть доступны для размещения и деактивации сцен. Эти сцены могут быть загружены и проверены (асинхронно) из скрипта. Возможности аналогичны Remoting API ,

Класс Script содержит член Scene, который предоставляет методы и свойства для описанных выше функций через интерфейс IScriptScene.
Полную документацию по всем методам и свойствам можно найти в отдельном файле справки API Ventuz Remoting в папке установки Ventuz.

Важно знать, что на интерфейсе IScriptScene есть некоторые команды, которые обрабатываются асинхронно неблокирующим образом. Эти команды:

  • LoadScene (), если для флага loadAsync установлено значение true. Продолжительность этой команды не определена, но состояние загрузки может быть запрошено методом GetLoadValidateProgress ().
  • ReleaseScene (), если флаг releaseAsync установлен в значение true. Продолжительность этой команды не определена.
  • Команды Set (), Invoke (), SetScene (), SetPortActive () обрабатываются в следующем возможном кадре, чтобы обеспечить правильность процесса проверки узла.

Вот пример того, как перебрать все изображения в папке проекта и установить соответствующий VentuzUri для свойства File узла ImageLoader, добавленного в SceneData? как ImageUri :

public override void Validate () {IScriptScene iss = this.Scene; // получить все имена файлов изображений в папке проекта if (this.images == null) {this.images = iss.GetFiles (Ventuz.Remoting2.DataPool.Images); } if (ImageIndex <this.images.Length) {// создаем VentuzUri для текущего свойства ImageIndex VentuzUri uri = VentuzUri.FromDataPool (Ventuz.Remoting2.DataPool.Images, this.images [ImageIndex]); // присваиваем свойству File значение SceneData 'ImageUri' iss.Set (новая строка [] {"/ ImageUri"}, новый объект [] {uri}, null, null); } change = true; }

В следующем примере показано, как инициировать асинхронную загрузку и проверку сцены из сценария:

IScriptScene newScene = null; float lastProgress = 0.0f; SceneStatus lastStatus = SceneStatus.None; public bool OnLoadScene (int arg) {// сбросить параметр Progress = 0; // свойство вывода на этом узле скрипта lastProgress = 0; lastStatus = SceneStatus.None; изменено = верно; // планируем асинхронную загрузку сцены newScene = this.Scene.LoadScene ("MyTicker", true, false); вернуть ложь; } public override bool Generate () {// проверка состояния загрузки / проверки if (newScene! = null) {// получение статуса загрузки / проверки для статуса newScene SceneStatus; Progress = this.Scene.GetLoadValidateProgress (newScene, out status); if (lastProgress! = Progress) {// если что-то изменилось, установить выходное свойство lastProgress = Progress; изменено = верно; } if (status == SceneStatus.Ready && lastStatus! = status) {// загрузка / проверка завершена - вызвать событие на этом узле сценария, чтобы сообщить об успехе lastStatus = status; Загруженный (); }} // возвращаем истину, если выходные значения были изменены, если (изменено) {изменено = ложно; вернуть истину; } вернуть ложь; }

Регистрация сообщений

Можно записывать сообщения журнала в окно просмотра сообщений конструктора и Вентуз Лог файлы. Для этого используйте класс VLog и его методы статического журнала, такие как Info (...) , Warning (...) или Error (...) :

VLog.Info («Только для информации»); VLog.Info («Имя модуля», «Текст информации»); VLog.Info («Имя модуля», «Информационный текст», VPopup.Never);

Отладка с помощью внешнего отладчика

К узлам Ventuz Script можно подключить внешний отладчик. Это предоставляет пользователю полную функциональность прилагаемой среды разработки. Поддерживаемые отладчики:

  • Visual Studio 2008
  • Visual Studio 2010
  • Visual Studio 2012
  • любой другой JIT-отладчик для .net 3.5 и выше.

Включите Debug для выбранного узла Script, нажав соответствующую кнопку в нижней части Редактор недвижимости , Состояние параметра Debug не сохраняется вместе с узлом. После перезагрузки сцены опция « Отладка» всегда отключена .

Программная точка останова может быть вызвана вызовом метода BREAK (). Это автоматически прикрепит один из доступных отладчиков, если это еще не сделано.

public bool OnMethod1 (int arg) {BREAK (); вернуть ложь; } Открытая функция OnMethod1 (ByVal arg As Integer) As Boolean BREAK Возвращает функцию False End

Не редактируйте код в текстовом редакторе отладчика, так как изменения не будут перенесены обратно в узел скрипта. Редактируйте код скрипта только в редакторе скриптов Ventuz! Если исходный код скрипта изменяется внутри Ventuz, он перекомпилируется в новую сборку и загружается (связывается) в процесс Ventuz. Поскольку среда выполнения .net не предоставляет возможности выгрузки сборки, все предыдущие версии скрипта хранятся в памяти (см. Http://msdn.microsoft.com/en-us/library/ms173101%28v=VS.100%29.aspx )! Как только код был изменен и перекомпилирован в Ventuz, код, отображаемый в Отладчике, а также связанные точки останова становятся недействительными, поскольку они все еще ссылаются на старую сборку!

Если отладчик подключен к процессу Ventuz, сценарий может печатать текст в выходные данные отладки.

Console.WriteLine («Это сообщение из скрипта»);

Отладчик можно отсоединить от процесса Ventuz, просто закрыв его.

Символ DEBUG определяется, если включена опция Debug ! Директивы компилятора, такие как #if или ConditionalAttribute, интерпретируются как ожидается.

#if DEBUG // ... #else // ... #endif [Conditional ("DEBUG")] private void Print (строковое сообщение, объект params [] args) {Console.WriteLine (message, args); }

Похожие

В этом разделе описывается, как управлять учетными записями пользователей и группами пользователей в AtoM. Уч...
В этом разделе описывается, как управлять учетными записями пользователей и группами пользователей в AtoM. Учетные записи пользователей и группы пользователей используются для определения пользовательские роли которые определяют уровни доступа, или
Создавайте действительно классные карты с помощью этих приложений
Карты Google динамичны. Создание индивидуальных карт через сервис не очень сложно Но в Интернете существует множество сторонних инструментов, которые помогут вам создавать полностью настраиваемые гибридные приложения Карт Google. Вы можете делать все: от интеграции геотегов Flickr до картирования свадебных событий и просто рисования. Инструменты картирования
BlueBorne - очень опасный пробел в протоколе Bluetooth
Bluetooth является одной из тех технологий, которая оставила свой след в том, как мы используем электронику сегодня. Он стал стандартом, используемым для беспрепятственного подключения устройств, включая растущее число интеллектуальных аксессуаров и принадлежностей к Интернету
3 способа установки и запуска Kaspersky Rescue Disk с USB-накопителя
Конечно, есть много хорошие бесплатные антивирусные пакеты вокруг , но если кто-то спросит нас, какой коммерческий антивирус или пакет интернет-безопасности мы бы порекомендовали людям, без сомнения, одним из тех, кто находится в начале списка, был бы Kaspersky. Частота обнаружения отличная и всегда одна из лучших в сравнительных тестах A / V, она загружена функциями и не слишком сильно замедляет работу компьютера.
Премиум пакет Dr.Web для дома
антивирус Он запретит доступ вирусов и вредоносного программного обеспечения к защищенной системе, дезинфицируя уже проникшие вирусы.
Создание приложения JDBC в NetBeans: пошаговое руководство
Эта статья является попыткой помочь читателям, которые испытывают трудности при создании приложения JDBC в NetBeans. Идея состоит в том, чтобы сделать вещи максимально простыми, чтобы можно было практиковаться с самого начала. Возможность увидеть, как работает ваше первое приложение, не только забавна, но и улучшает теоретическую базу. В вычислительной технике есть несколько способов сделать одну простую вещь. Это пошаговое руководство является лишь одним из них. Конечно, в создаваемом
Создание адаптивного для мобильных устройств веб-дизайна
Вступление Мы собираемся рассказать, как создать адаптивный веб-интерфейс, разработанный для мобильных устройств. Эта статья и демонстрация пойдет по следующему: Существует еще более актуальное отзывчивое руководство по нашим новым
Мы часто сталкиваемся с проблемой достижения стены при разработке интернет-магазина. Gro e-commers с...
Мы часто сталкиваемся с проблемой достижения стены при разработке интернет-магазина. Gro e-commers создаются на основе решений с открытым исходным кодом, которые, в случае успеха, начинают иметь проблемы, среди прочего с повышенным трафиком на сайте. Тогда не хватает современных функциональных возможностей, интеграции и постоянной поддержки. Посмотрите, как вместе с Ogrodosfera.pl - лидером в индустрии дома и сада - мы осуществили миграцию и создали современный интернет-магазин, полный маркетинговых