Направленные огни
Я работаю над идеей игры (2D), которая требует направленного света. В основном я хочу добавить источники света, которые могут быть перемещены, и световые лучи взаимодействуют с другими телами на сцене.
То, что я сейчас делаю, - это тест, в котором с помощью датчиков (box2d) и ccDrawLine я мог бы достичь чего-то похожего на то, что хочу. В основном я посылаю кучу датчиков с определенной точки и с столкновениями обнаружения raycast, получаю конечные точки и рисую линии над датчиками.
Просто хочу получить некоторые мнения, если это хороший способ сделать это или другие лучшие варианты для создания чего-то подобного?
Кроме того, я хотел бы знать, как сделать световой эффект по этой области (область датчиков), чтобы обеспечить более эффектный световой эффект. Любые идеи?
Ответы
Ответ 1
Я могу придумать один классный эффект, который вы могли бы применить. Поместите некоторые частицы внутри области, где видна свет, например, искры сияют и падают очень медленно, что-то вроде этого picture
Любой подход к этой проблеме должен будет использовать обнаружение конфликтов в любом случае, так что вы довольно хороши, если у вас ограниченное количество объектов box2d.
Другой подход, когда у вас много объектов box2d, о которых я думаю, заключается в том, чтобы сделать ваш экран текстурой только сплошными цветами (должен быть быстрым) и выполнить трассировку лучей на этой сгенерированной текстуре, чтобы найти пиксели, которые будут затронуты по свету. Таким образом, вы ограничены разрешением не количеством объектов box2d.
Ответ 2
Здесь есть хороший исходный код о динамических и статических огнях в 2D-пространстве.
Это Ruby-код, но его легко понять, поэтому не нужно долго переносить его на Obj-C/Cocos2D/box2D.
Я действительно надеюсь, что это поможет вам, поскольку это помогло мне.
Ответ 3
Hm, интересный вопрос. Cocos2D действительно обеспечивает некоторые довольно гибкие маскирующие эффекты. У вас может быть градиентная маска, которую вы кладете над своими объектами, где ее положение зависит от положения "света", тем самым давая эффект, чтобы ваши объекты были окрашены светом.