현재 롤링 텍스트 메서드를 만들려고합니다.이 메서드는 인수로 String
을 사용합니다. 곧, 왼쪽에서 오른쪽으로 그리기 시작하고 시간이 지남에 따라 새로운 행으로 넘어 가서 화면에서 벗어나지 않습니다. 내 목표를 달성하기 위해 FontMetrics
을 사용하고 있습니다.Java : 그래픽 정렬 문자열
내 주 클래스의 렌더링 메서드에서 내 RollingText.render(Graphics g, int x, int y)
에 인수를 전달합니다. 내 render
메서드 내에서 Graphics
글꼴 및 색상을 설정하고 모두 FontMetrics
을 잡아서 FontMetrics
에서 다른 물건을 잡기 시작합니다. 또한 문자열을 텍스트로 그리기위한 for 루프를 사용합니다.
public void render(Graphics g, int x, int y) {
// text is the field that a grab the index of the string from
// the index is the max part of the string I'm grabbing from,
// increments using the update() method
String str = text.substring(0, index);
String[] words = str.split(" ");
Font f = new Font(g.getFont().getName(), 0, 24);
FontMetrics fmetrics = g.getFontMetrics(f);
g.setColor(Color.white);
g.setFont(f);
int line = 1;
int charsDrawn = 0;
int wordsDrawn = 0;
int charWidth = fmetrics.charWidth('a');
int fontHeight = fmetrics.getHeight();
for (int i = 0; i < words.length; i++) {
int wordWidth = fmetrics.stringWidth(words[i]);
if (wordWidth* wordsDrawn + charWidth * charsDrawn > game.getWidth()) {
line++;
charsDrawn = 0;
wordsDrawn = 0;
}
g.drawString(words[i], x * charsDrawn + charWidth, y + fontHeight * line);
charsDrawn += words[i].length();
wordsDrawn += 1;
}
}
현재이 시점에서 모든 것이 잘 작동하지만 남은 문제는 drawString
방법의 각 단어 사이의 공간은 크게 과장과 같이이다이다 :
라인 :
g.drawString(words[i], x * charsDrawn + charWidth, y + fontHeight * line);
나는 현재의 X 멋 부리다에 대한 계산을 수행하는 올바른 방법을 찾는 데 유일한 문제 이온. 현재, 그것은 단어의 길이에 따라 무겁고 역동적 인 간격을 가지고 있으며, 적어도 정상적으로 보이게하는 방법을 알 수는 없습니다. 나는 현재 정의 된 정수와 다른 조합을 시도했다. 발생하는 문제는 부정확 한 간격에서 벗어나는 것, 위치 지정 및 깜박임을 줄이는 것, 함께 실행되는 텍스트 일 것입니다.
마지막으로, 내 질문은 어떤 알고리즘을 사용하여 텍스트의 x 좌표가 올바르게 보이게 할 수 있습니까?