2014-04-18 1 views
-1

일부 Java 게임을하고 있는데 이미지를 가져 오지 않고 게임을 만들면 멋질 것입니다. 따라서 맞춤형 도형을 만들어 Graphics 객체에 가져와 그릴 수 있어야합니다. 내 게임의 주인공은 불완전한 원과 두 개의 수직선을 눈으로 구성하여 점액과 매우 유사한 단고가 될 것입니다. 나는 크기를 나타내는 매개 변수를 주어 단고를 만들 수 있어야합니다. 또한, 눈의 위치를 ​​수정하거나 하단 곡선을 사용하여 바닥과의 상호 작용을 표현하는 것이 더 좋습니다. 더 자세히 말하면, 색상으로 채우고 질감이나 무언가를 줄 수 있다면 기쁠 것입니다. 그러나 모든 것은 원과 두 줄로 시작합니다. Java에서 사용자 정의 모양을 만드는 방법

나는 Shape, GeneralPath, PathIterator, Area, Ellipse, 일부 소스 코드 등 일부 API를 확인. GeneralPath를 사용하여 직선, 2 차 곡선 및 베 지어 커브를 그리는 방법을 배웠습니다. 하지만 여전히 내 사용자 정의 모양을 구현하는 방법을 모르겠습니다. 이 question stackoverflow에서 발견했지만 좋은 답변을 게시 할 수 있습니다. 누군가가 단지 제목을 읽고이 질문의 내용을 건너 뛰고 경우

, 나는이 질문에 대한 에게 '모양'인터페이스를 구현하는 것을 의미합니다 사용자 정의 모양을 만들 것을 강조해야한다. 뿐만 아니라 모양을 그립니다.

+1

-1, 반드시 [Java 자습서] (http://docs.oracle.com/javase/tutorial/2d/geometry/index.html)에서 ** must **로 질문해야합니다. . – Astrobleme

+0

@ambigram_maker 【GeneralPath를 사용하여 직선, 2 차 곡선 및 베 지어 커브를 그리는 방법을 배웠습니다. 하지만 여전히 내 사용자 정의 모양을 구현하는 방법을 모르겠다.] 그것은 당신이 질문의 제목을 읽고 다음 주석을 것 같습니다. – bijiDango

+0

음 ... _implement_를 정의하십시오. _ 어디에서 사용하고 싶습니까? _How_ 구현 하시겠습니까? – Astrobleme

답변

3

연구의 하루가 끝난 후 마침내 그것을했습니다. 나와 같은 문제가있는 사람이라면, 내가 한 일을하는 것이 좋습니다.

먼저 자바 API 소스 코드를 참조하십시오. 여기서 소스 코드는 Ellipse2D.class입니다. 소스 코드 다음에는 내부 정적 클래스 Ellipse2D.Double, Ellipse2D.Float을 무시할 수 있습니다.이 시점에서 중요하지 않습니다.

Shape 인터페이스를 구현하기 위해 가장 중요한 방법은이 방법이 PathIterator 그릴 얻기 위해 paintComponent에 의해 호출되는

public PathIterator getPathIterator(AffineTransform at) { 
    return new EllipseIterator(this, at); 
    } 

입니다. 그래서 소스 코드가하는 것처럼, 자신 만의 ShapeIterator을 만들 수 있습니다.

소스 코드는 EllipseIterator입니다. 보시다시피, 4 가지 방법이 있습니다 (생성자와 복제본 제외). 연구를 위해 getWindingRule()을 남겨 둘 수 있습니다. isDone()next()은 다소 이해하기 쉽습니다.

그런 다음 public int currentSegment(float[] args)에 집중하겠습니다.

  1. 반환 값은 정적 최종 INT 필드해야 INT입니다 : SEG_CLOSE, SEG_CUBICTO, 등등 그들은 당신의 모양을 그리기에 대한 지침을 제공합니다. SEG_MOVE은 시작점을 이동시키고, SEG_LINETO은 시작점에서 끝점까지 직선을 그립니다. 4 차 곡선과 베 지어 곡선과 같은 몇 가지가 더 있습니다. 자바 API에서 세부 사항을 확인할 수 있습니다.

  2. 인수 float[] args도 반환 값 문으로 간주해야합니다. 위 지침에 대한 매개 변수를 제공합니다. SEG_MOVETO의 경우 SEG_LINETO의 경우 2 개의 params가 필요하므로 args [0] 및 args [1] (x 및 y)를 수정하십시오. SEG_QUADTO의 경우 4 개의 매개 변수가 필요하고 SEG_CUBICTO에는 6이 필요합니다.

조심스럽게 소스 코드를 따라 가면 모양을 만드는 것이 어렵지 않습니다. 아직 Shape 인터페이스의 모든 메소드를 완료하지는 못했지만 모양은 이미 g2d 인스턴스에 의해 그려 질 수 있습니다.