2014-10-18 5 views
1

Почему это происходит?libgdx - scene2d.ui высота метки

TextBounds tBounds1 = game.font.getWrappedBounds("blah\nblah\nblah", 300); 
System.out.println(""+tBounds1.height); // outputs 79.0001 
TextBounds tBounds2 = game.font.getWrappedBounds("blah", 300); 
System.out.println(""+tBounds1.height); // outputs 20.00002 

Так переменная tBounds1 изменилась, просто вызвав getWrappedBounds() на другой переменной. Как это вообще ...?

ответ

2

Кажется, что tBounds1 и tBounds2 указывают на один и тот же объект.

Если вы пытаетесь проверить их, это происходит, что areSame ниже, это правда

boolean areSame = tBounds1 == tBounds2; 

так tBounds1 и tBounds2 указывают на тот же объект. getWrappedBounds метод вызывается:

public TextBounds getWrappedBounds (CharSequence str, float wrapWidth) { 
    return getWrappedBounds(str, wrapWidth, cache.getBounds()); 
} 

Не тот cache.getBounds. кэш создается при запуске при создании BitmapFont

private final BitmapFontCache cache; 

так кэш это свойство текущего шрифта и поэтому, когда что-то будет изменено, оно также распространяется.

getWrappedBounds метод вызывает также другой метод:

public TextBounds getWrappedBounds (CharSequence str, float wrapWidth, TextBounds textBounds) { 
    // Just removed the lines here 
    textBounds.width = maxWidth; 
    textBounds.height = data.capHeight + (numLines - 1) * data.lineHeight; 
    return **textBounds**; 
} 

Этот метод в конце изменяет объект кэша BitmapFontCache.

Так что, если вы хотите, чтобы вычислить высоту 2 различных строк, вы можете присвоить его примитивным типам:

float height1 = font.getWrappedBounds("blah\nblah\nblah", 300); 
float height2 = font.getWrappedBounds("blah", 300); 

или если вам нужен полный BitmapFont.TextBounds объект, это:

BitmapFont.TextBounds tBounds1 = new BitmapFont.TextBounds(font.getWrappedBounds("blah\nblah\nblah", 300)); 
BitmapFont.TextBounds tBounds2 = new BitmapFont.TextBounds(font.getWrappedBounds("blah", 300)); 

Таким образом, вы ранили, чтобы tBounds1 и tBounds2 указывали на разные объекты.

+0

Да, я пошел с присвоением примитивным типам, но я потратил час, пытаясь найти проблему в первую очередь. Ну что ж – PFort

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