2013-06-19 2 views
0

У меня есть текст, который я иногда хочу иметь черный контур, а иногда и зеленый. Я думал, что смогу выполнить это, имея два StrokeFonts, один с черным контуром, и один с зеленым контуром, а затем, когда я создаю экземпляр объекта Text, я просто использую шрифт, который я хочу.Strokefont Цвет обводки Overwritten после setColor()

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

Есть ли что-то, что мне не хватает здесь, или еще один способ обойти это? Я прокомментировал вызовы setColor() после того, как я решил, какой StrokeFont использовать, и я вижу ход правильно, поэтому я знаю, что он перезаписывается вызовом setColor().

ответ

2

Set color умножает значение существующего цвета. Таким образом, черный (значение 0) никогда не изменит цвет. Но белый цвет станет любым цветом. Итак, если вы хотите сделать спрайт или текст, который примет любой цвет, он должен начинаться как белый.

Я думаю, что у вас все еще может быть проблема, так как штрих шрифта штриха нарисован на ту же текстуру, что и заливка, так что любая цветовая коррекция, сделанная для штриха, будет одинаково оттенкать заливку.

Вы либо хотите больше шрифтов, либо выбрать другой способ их рендеринга, например, использовать шрифт контура и шрифт заливки, чтобы вы отображали два объекта Text. В любом случае, вы должны найти свой путь, если поймете, что setColor умножает значения, умноженные на существующее значение.

+0

Я знаю об использовании белого цвета, чтобы можно было изменить цвет. Но в основном проблема заключается в том, что setColor(), похоже, делает это умножение и меняет цвет штриха, даже если вы этого не хотите. Есть ли способ обойти это? Там честно должен быть setStrokeColor() или что-то в API. Похоже, мне придется изменить источник. Я отвечу на ваш ответ из-за умножения информации о цветах. –

+1

Дело в том, что удар не добавляется во время выполнения. Его нарисовано на текстуре. Поэтому, когда вы накладываете setColor() на шрифт, штрих является частью одной и той же текстуры. Вы не можете оттенять текстуру выборочно с помощью пикселя. Что вам нужно сделать, это создать свои собственные растровые шрифты, один из штрихов и один из заполнения, а не полагаться на StrokeFont, чтобы получить необходимый эффект. Тогда всякий раз, когда вы показываете текст штриха, на самом деле есть два многослойных текста - один из шрифтов Stroke и один из них. Вы будете иметь возможность setColor() для каждого текстового объекта индивидуально. Пользователю это будет выглядеть в текстовом поле. –

+0

Что мой друг - хорошая идея. Когда вы говорите «мой собственный растровый шрифт», я предполагаю, что вы имеете в виду как мой собственный класс Java, который объединяет два шрифта/два объекта «Text» в AndEngine вместе в единый объект, который я могу затем самостоятельно контролировать, как я хочу. Это действительно хорошая идея. Благодарю. –

Смежные вопросы