ios core-image sprite-kit

ios - ¿Hay alguna manera de crear un esquema de concordancia CGPath de un SKSpriteNode?



core-image sprite-kit (1)

Lo que estás buscando se llama algoritmo de rastreo de contorno . El seguimiento de vecinos de Moore es popular y funciona bien para imágenes y mapas de mosaico. Pero revisa las alternativas porque pueden ajustarse mejor a tus propósitos.

Los cuadrados de marcha AFAIK y el trazado de contorno están estrechamente relacionados, si no son los mismos (clase de) algoritmos.

Una implementación para mapas de mosaico (para crear formas físicas a partir de teselas) está incluida en Kobold Kit . El cuerpo del algoritmo está en el método traceContours de KKTilemapLayerContourTracer.m .

Parece más complejo de lo que realmente es, por otro lado, lleva tiempo entenderlo porque es un algoritmo "andante", lo que significa que los resultados de los pasos anteriores se usan en el paso actual para tomar decisiones.

La implementación de KK también incluye algunas correcciones menores específicas para mapas de mosaicos (es decir, dos o más mosaicos conectados horizontal o verticalmente se convierten en una sola línea en lugar de dividir la línea en segmentos de tamaño de mosaico). También se creó con una estructura de matriz de puntos personalizada, y cuando lo porté a SK, decidí que sería más fácil continuar con eso y solo al final convertir las matrices de puntos en objetos CGPath.

Puede realizar ciertas optimizaciones si puede asumir con seguridad que la forma que está tratando de rastrear no va a tocar los bordes, y no puede haber ningún mosaico que esté conectado en diagonal. Todo esto se vuelve más claro cuando en realidad está implementando el algoritmo para sus propios fines.

Pero en lo que respecta a una solución lista para todos los usos, no existe ninguna.

Mi objetivo es crear un CGPath que coincida con el contorno de un SKSpriteNode.

Esto sería útil para crear brillos / contornos de SKSpriteNodes, así como una ruta para la física.

Una idea que tuve, pero realmente no he trabajado mucho con CIImage, así que no sé si hay una forma de acceder / modificar imágenes en un nivel de píxel.

Entonces quizás podría portar algo como esto a Objective-C:

http://www.sakri.net/blog/2009/05/28/detecting-edge-pixels-with-marching-squares-algorithm/

También estoy muy abierto a otros enfoques que hacen que este proceso sea automatizado, a diferencia de lo que hago al crear rutas de forma para cada sprite que hago para la física o los efectos de contorno / brillo.