SSRLoS API
Ранний функционал был разработан в соответствии со стилем cocos2d-x, позже стал популярным Creator. При портировании учитывался компонентный подход к проектированию.
Внимание
Представленные здесь API и демонстрационные программы основаны на cocos2d-x. Однако, поскольку основные алгоритмы реализации Creator и cocos2d-x полностью совпадают, эти API в основном также можно использовать непосредственно в проекте Creator.
Документация jsdoc немного отстаёт от фактического открытого исходного кода.
В документации jsdoc не содержится информация о компоненте shadow, так как он находится в экспериментальной версии.
API-документация всё ещё дорабатывается. Для получения подробной информации об интерфейсах и методах использования рекомендуется обратиться к соответствующему Demo.
Core
Основной компонент LoS основан на алгоритме трассировки лучей для вычисления видимой области и других связанных данных.
Load — установка компонента
Любой объект cc.Node может быть оснащён компонентом для получения функции видимости:
var robot = new cc.Sprite("...");
scene.addChild(robot);
var losCoreComponent = robot.addComponent(ssr.LoS.Component.Core, this);
Setup — настройка компонента
После добавления компонента LoS можно настроить его с помощью различных интерфейсов. Здесь представлены некоторые основные интерфейсы.
Owner — владелец
Устанавливает владельца компонента. По умолчанию привязывается при добавлении компонента, а затем изменяется через этот интерфейс:
losCoreComponent.setOwner(node);
Mode — режим
Компонент поддерживает четыре основных режима видимости:
Обратите внимание: хотя модуль предоставляет интерфейс setMode для переключения режимов, обычно он используется только для перехода в режим Unlimited Range.
Остальные режимы включаются автоматически при установке соответствующих параметров:
// Установка диапазона видимости вызывает автоматический переход в режим LIMITED_RANGE_WITH_FULL_ANGLE
losCoreComponent.setRadius(value);
// Установка центрального угла обзора (в градусах) вызывает автоматический переход в режимы LIMITED_RANGE_WITH_REFLEX_ANGLE / NON_REFLEX_ANGLE
losCoreComponent.setCentralAngle(value);
// Настройка размера видимой зоны применима только к режиму UNLIMITED_RANGE
losCoreComponent.setSightSize(value);
// Настройка видимого прямоугольника применима только к режиму UNLIMITED_RANGE
losCoreComponent.setSightRect(value);
Obstacle — препятствие
После настройки режима и параметров необходимо добавить препятствия.
// Добавление препятствий для расчёта видимости
losCoreComponent.addObstacle(node);
// Удаление ранее добавленных препятствий
losCoreComponent.removeObstacle(node);
// Удаление всех добавленных препятствий
losCoreComponent.removeAllObstacles();
// Получение всех добавленных препятствий
losCoreComponent.getObstacles();
Update — обновление
После завершения настройки можно получить данные о видимости через компонент.
// Вызов по мере необходимости для обновления данных о диапазоне видимости. Обычно требуется вызывать каждый кадр
losCoreComponent.update();
Output — вывод
Данные о видимости можно получить после вызова интерфейса обновления.
// Получение фактической видимой области
losCoreComponent.getSightArea();
// Получение информации о реальных препятствиях на границе
losCoreComponent.getBlockingEdgeArray();
// Получение всей информации о лучах
losCoreComponent.getRayArray();
// Получение всей потенциальной информации о препятствиях на границах
losCoreComponent.getPotentialBlockingEdgeArray();
// Получение всей реальной информации о видимых границах
losCoreComponent.getVisibleEdgeArray();
// Получение всей информации о точках пересечения
losCoreComponent.getHitPointArray();
// Получение информации о вершинах видимости
losCoreComponent.getSightVertArray();
Obstacle
Препятствия являются важной информацией для вычислений основного компонента.
Load — установка компонента
Благодаря дизайну компонентов любой объект можно легко преобразовать в препятствие.
Все объекты engine cc.Node могут стать препятствиями.
var wall = new cc.Sprite("...");
scene.addChild(wall);
var losObstacleComponent = wall.addComponent(ssr.LoS.Component.Obstacle);
Setup — настройка компонента
Создав препятствие, необходимо его настроить.
Информация о вершинах
TBD
Свойства управления
TBD
<iframe src="https://codesandbox.io/embed/ssrlos-demo-dirty-detection-eft0n?fontsize=14&hidenavigation=1&theme=dark&view=preview" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="ssrlos-demo-dirty-detection" allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" ></iframe>Render
Визуализация компонентов позволяет создавать различные эффекты визуализации с использованием разных компонентов.
Create — создание
// Создание компонента для визуализации лучей, затем настройка некоторых свойств эффекта визуализации
var losComponentRenderRay = new ssr.LoS.Component.RenderRay(loSComponentCore);
losComponentRenderRay.setup(TRANSPARENT, 1, YELLOW);
this.addChild(losComponentRenderRay);
// Доступно множество компонентов визуализации, которые в основном соответствуют выходным данным алгоритма один к одному. ССР. ЛоС. Компонент. Рендер Рэй.
ССР. ЛоС. Компонент. Рендер Потеншиал БлокИн Эдж.
ССР. ЛоС. Компонент. Рендер БлокИн Эдж.
ССР. ЛоС. Компонент. Рендер Визибл Эдж.
ССР. ЛоС. Компонент. Рендер Сайт Арэа.
ССР. ЛоС. Компонент. Рендер Хит Пойнт.
ССР. ЛоС. Компонент. Рендер Сайт Верт.
### Update — обновление
После создания рендер-объекта необходимо согласовать его с компонентом Core для управления им:
```javascript
// Все рендер компоненты имеют plot, метод, который используется для рендеринга путём вызова.
if (losCoreComponent.update()) {
// Если Core обновлён, то рендер также обновляется.
losComponentRenderXXX.plot();
}
// Все рендер компоненты также имеют enable / disable, методы, которые по умолчанию отключены.
losComponentRenderXXX.disable();
losComponentRenderXXX.enable();
Компоненты Render в основном используются для непосредственного рендеринга выходных данных алгоритма и часто используются для отладки. Конечно, пользователи также могут свободно настраивать их.
В отличие от этого, Mask — это настройка способа рендеринга SightArea в компонентах Render, которая достигает эффекта отображения только видимой области источника света.
var losMaskComponent = new ssr.LoS.Component.Mask(BLACK);
this.addChild(losMaskComponent);
После создания компонента Mask необходимо добавить цели, которые нужно рендерить. Поддерживается одновременный рендеринг нескольких целей.
losMaskComponent.addTarget(loSComponentCoreA);
losMaskComponent.addTarget(loSComponentCoreB);
losMaskComponent.addTarget(loSComponentCoreC);
После добавления целей рендеринга, как и в случае с компонентами Render, при необходимости можно выполнить рендеринг в сочетании с Core.
if (losCoreComponent.update()) {
// Если Core обновлен, то рендерится.
// Можно выбрать обновление на основе собственной логики.
losMaskComponent.updateTarget(loSComponentCoreA);
losMaskComponent.updateTarget(loSComponentCoreC);
}
Реализует простой эффект освещения путём настройки рендеринга SightArea, рассчитанного компонентом Core.
TBD
<iframe src="https://codesandbox.io/embed/ssrlos-demo-light-0h9gj?fontsize=14&hidenavigation=1&theme=dark&view=preview" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="ssrlos-demo-light" allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"> </iframe>Поддержка нескольких источников света
TBD
<iframe src="https://codesandbox.io/embed/ssrlos-demo-multi-lights-m2ryx?fontsize=14&hidenavigation=1&theme=dark&view=preview" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="ssrlos-demo-multi-lights" allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"> </iframe>На основе расчёта SightArea компонентом Core. Провести кастомизированный рендеринг, реализовать простой эффект тени.
TBD
TBD
Некоторые функции, связанные с алгоритмами, также доступны для внешнего вызова. Подробнее см. jsdoc
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )