Направленные огни

Я работаю над идеей игры (2D), которая требует направленного света. В основном я хочу добавить источники света, которые могут быть перемещены, и световые лучи взаимодействуют с другими телами на сцене.

То, что я сейчас делаю, - это тест, в котором с помощью датчиков (box2d) и ccDrawLine я мог бы достичь чего-то похожего на то, что хочу. В основном я посылаю кучу датчиков с определенной точки и с столкновениями обнаружения raycast, получаю конечные точки и рисую линии над датчиками.

Просто хочу получить некоторые мнения, если это хороший способ сделать это или другие лучшие варианты для создания чего-то подобного?

Кроме того, я хотел бы знать, как сделать световой эффект по этой области (область датчиков), чтобы обеспечить более эффектный световой эффект. Любые идеи?

Ответ 1

Я могу придумать один классный эффект, который вы могли бы применить. Поместите некоторые частицы внутри области, где видна свет, например, искры сияют и падают очень медленно, что-то вроде этого picture

Любой подход к этой проблеме должен будет использовать обнаружение конфликтов в любом случае, так что вы довольно хороши, если у вас ограниченное количество объектов box2d.

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

Ответ 2

Здесь есть хороший исходный код о динамических и статических огнях в 2D-пространстве. Это Ruby-код, но его легко понять, поэтому не нужно долго переносить его на Obj-C/Cocos2D/box2D.

Я действительно надеюсь, что это поможет вам, поскольку это помогло мне.

Ответ 3

Hm, интересный вопрос. Cocos2D действительно обеспечивает некоторые довольно гибкие маскирующие эффекты. У вас может быть градиентная маска, которую вы кладете над своими объектами, где ее положение зависит от положения "света", тем самым давая эффект, чтобы ваши объекты были окрашены светом.