2014-01-20 3 views
1

이것은 두 가지 질문입니다.
paint 구성원이 코드 네임 1을 사용하는 간단한 2D 그래픽 게임에 가장 적합한 방법입니까? 또는 나는 그것을 시도하지 않아야합니까 ??
2) 아래 코드가 내 Component을 즉시 지우는 이유는 무엇입니까?사용자 지정 구성 요소 그리기

protected void StartGame() 
{ 
    final Component newC = new PaintedComponent(); 

    Container mv = findContainerMainVisual(); 

    mv.addComponent(newC); 
    mv.setShouldCalcPreferredSize(true); 
    mv.animateLayout(200); 
} 

그리고 구성 요소는이 같은 paint 멤버 함수를 오버라이드 (override) :

나는이처럼 내 구성 요소를 초기화

public class PaintedComponent extends Component { 
    private int nextColour; 

    public PaintedComponent() { 
     super(); 
     setSize(new Dimension(200,200)); 
     nextColour = 0x8f8f8f; 
    } 


    @Override 
    public void paint(Graphics g) { 
     super.paint(g); // I've tried without this, but it's the same 
     g.setColor(0xffffff); 
     g.fillRadialGradient(0xffffff, nextColour, 0,0,this.getWidth(), this.getHeight()); 
    } 
} 

답변

1

체크 아웃 당신이 볼 수 코드 네임 하나의 Poker demo을 최신 데모 버전을 사용하면 페인트를 덮어 쓰더라도 제대로 작동하지만 매우 다른 접근 방식을 취합니다.

구성 요소가 표시되지 않는 이유는 animateLayout() 메서드가 화면의 유효성을 검사 할 때 크기가 0이기 때문입니다. 테두리 레이아웃의 가운데에 배치 (사용 가능한 모든 공간을 차지하고 스크롤을 비활성화)하거나 적절한 크기로 반환하려면 calcPreferredSize()를 재정의해야합니다.

방사형 그래디언트를 피하는 것이 좋습니다. 일부 플랫폼에서는 실제로 느리기 때문에 좋습니다. 성능에 대해서는 this을 참조하십시오.

+0

감사합니다. 예, 저는 포커 데모를 보았습니다.하지만 구성 요소를 움직여서 작업하고 싶은 것을 얻을 수 있다고 생각하지 않습니다. - 멋진 아이디어 : 다른 사람 주위를 돌고있는 물건을 보여주고 싶다면 어떻게 할 수 있을까요? 나는 "포커 기술"을 사용하여 그렇게합니까? – noelicus

+0

또한,'calcPreferredSize()'를 오버라이드하는 것은 아무 것도하지 않는 것 같지만,'center of border layout'은 치료를 위해 작용합니다 :) – noelicus

+0

설명에서 이야기하기가 어렵지만 독자적인 레이아웃 매니저를 만들고 사용할 수 있습니다 원하는 위치에 구성 요소를 배치 할 수 있습니다. 레이아웃 관리자는 실제로 매우 간단하게 만들 수 있습니다. 개발자 가이드에서이를 수행하는 샘플이 있습니다. –

관련 문제