Безусловно, самый простой способ сделать это (так что, вероятно, лучший способ, если вы не очень ограничены в производительности) - это иметь две копии ваших спрайтов.
- Обычная версия
- «Толстая», неокрашенная версия - в основном белая версия вашего спрайта X-много пикселей «толще», чем оригинал.
Нарисуйте весь объект, используя «толстую» версию, затем нарисуйте обычную версию поверх.
Делая «толстую» версию белой, вы можете использовать встроенную цветовую тонировку SpriteBatch для динамического изменения цвета выделения.
Чтобы сгенерировать "жирную" версию, я рекомендую написать расширение Content Pipeline. которое может автоматически принимать ваши исходные спрайты, читать их альфа-канал, создавать новый альфа-канал путем выборки максимального альфа-канала в исходном изображении X-много пикселей вокруг каждого пикселя, и установка RGB = (1,1,1).
Вы должны будете убедиться, что у всех ваших спрайтов достаточно прозрачной границы, чтобы добавить контур (вы можете проверить это в процессоре контента - и даже освободить место при необходимости).
Если у вас есть только несколько спрайтов, то вы можете просто использовать хороший редактор изображений (GIMP, Photoshop) и делать это вручную: альфа-канал для выделения, расширение выделения, выделение до альфы, заливка цветовых каналов белым.