2012-12-05 5 views
0

저는 작은 게임을위한 프레임 워크로 Slick 라이브러리를 사용하고 있습니다. Linebreaks는 Graphics2d 객체에서 기본적으로 지원되지 않습니다. 그러나, 나는이 작은 수정을 발견기존 메서드 편집

private void drawString(Graphics g, String text, int x, int y) { 
    for (String line : text.split("\n")) 
     g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
} 

내가 자바에 아주 새로운 오전로서 내가 가장 쉬운 방법이 될 것이다 구현, 정말 도움을 사랑하는 것이 무엇인지 확실하지 않다! :-)

+1

위의 접근 방법에는 어떤 문제가 있습니까? 어떤 종류의 도움을 더 명확하게 할 수 있습니까? –

+0

음,이 코드는 어디에 둘 수 있습니까? 만약 내가 commandString을 사용하여 drawString 메서드를 호출하면 클래스로 이동하지만 메서드 자체는 컴파일되고 읽기 전용이라고합니다. –

답변

0

당신이 귀하의 경우 원하는 것은 :

A)이 경우에 (주어진 메소드를 오버로드하려면 클래스에 액세스 할 수 있으며 아마도) 또 하나의 매개 변수를 추가

예 :

private void drawString(Graphics g, String text, int x, int y,boolean test)

와 같은 테스트 또는 뭔가 진정한를 전달하지만이 일을 일의 원유 방법입니다

B) 그렇지 않으면 당신은 당신이 확장 한 클래스에 원하는대로 메소드를 구현하여 메소드를 구현하는 클래스를 확장하고 다시 수

C) 아니면이 가장 유력한 인 제 3의 대안으로 경우 @ user1594895이 상태로 그냥 원래의 방법을 편집하는 것입니다,하지만이 경우에 당신은 당신이 그렇지 않으면 가) 또는 B)

나를 보자하고 생각 원래 방법의 사용을하지 않습니다 확인해야합니다 어떤 접근법을 사용하기로 결정했는지 알 수 있습니다.

0

내 조언은 : 사용중인 Silk 라이브러리의 소스를 다운로드하십시오. https://bitbucket.org/kevglass/slick을 다운로드 할 수 있습니다.

지정한 수정 방법. 빌드하고 프로젝트에 포함하십시오. NetBeans 또는 Eclipse와 같은 IDE를 사용하면 간단합니다.

상대 패치가있는 버그를 제출하여 일반 라이브러리에 통합해야합니다.

0

하나의 클래스에서만이 메소드를 호출 할 때 적용해야하는 쉬운 방법 (자신의 게시물에 이미 언급되어 있음) : 클래스에 코드 스 니펫을 삽입 한 다음 다른 메소드와 마찬가지로 호출합니다 .. 그런 종류의 도우미 방법입니다.

public class MyGraphics extends Graphics { 
     @Override 
     public void drawString(String text, int x, int y) { 
     for (String line : text.split("\n")) 
      super.drawString(line, x, y += getFontMetrics().getHeight()); 
     } 
} 
: - 클래스는 최종이 아닌 경우 - 다만 클래스를 확장하고 메소드를 오버라이드 (override)


할 수있는 또 다른 쉬운 방법은 (당신이 무슨 뜻인지하지 않는 경우 문의)

그러면 다른 클래스와 정확히 같은, 자신의 클래스로 작업하십시오. drawString 메소드가 다르면 다음과 같이 인스턴스화합니다. Graphics g = new MyGrpahics();

관련 문제