新着情報TOP > 자바 애니메이션 예제

자바 애니메이션 예제

첫 번째 예제에서는 스윙 타이머를 사용하여 애니메이션을 만듭니다. 이것은 Java 게임에서 개체를 애니메이션하는 가장 쉬운 방법이기도 하지만 가장 효과적인 방법입니다. 5개의 상수가 정의됩니다. 처음 두 상수는 보드 너비와 높이입니다. 세 번째와 네 번째는 별의 초기 좌표입니다. 마지막 하나는 애니메이션의 속도를 결정합니다. Java에서 스레드를 사용하면 자체 스레드에서 실행되는 applet (또는 응용 프로그램)의 일부를 만들 수 있으며 이러한 부분은 다른 것을 방해하지 않고 자체적으로 모두 즐겁게 실행됩니다. 스레드 수에 따라 결국 시스템에 세금을 부과하여 모든 스레드가 느리게 실행되지만 모두 독립적으로 실행됩니다. 프레임 워크는 애니메이션의 많은 유형을 허용 하기에 충분히 일반적 이어야 한다 -페이드, 크기 변경, 등… – 스윙 구성 요소의 모든 유형. 내가 구축 한 프레임 워크는 인터페이스의 간단한 구현을 통해 일반화됩니다.

그 중심에는 스윙 타이머와 콜백 시스템이 있습니다. 아래에 게시된 SwingAnimator 클래스는 이벤트의 실제 타이밍을 처리하며 SwingAnimatorCallback 인터페이스를 호출하여 실제 애니메이션을 처리합니다. Java에서와 같이 멀티스레딩은 동일한 프로그램의 여러 부분이 서로 간섭하지 않고 동시에 병렬로 실행될 수 있음을 의미합니다. 각 스레드는 각 버스에서 서로 다른 작업을 진행하는 여러 버스와 같습니다. 두 번째로 필요한 것은 다시 그릴 실제 영역을 추적하는 방법입니다. 애니메이션의 각 프레임에 대해 드로잉 영역의 왼쪽 및 오른쪽 가장자리가 모두 변경됩니다(한 쪽은 새 타원형을 그리고 다른 쪽은 이전 프레임에서 남은 타원형의 비트를 지우기 위해) 이 두 x 값을 추적합니다. 에서는 왼쪽과 오른쪽 모두에 인스턴스 변수가 필요합니다. 애니메이션의 각 프레임으로 드로잉 영역의 가장자리를 업데이트하는 문제는 다시 그리기() 호출할 때마다 개별 해당 페인트()가 없을 수 있다는 것입니다. 시스템 리소스가 꽉 들어오면(시스템에서 실행중인 다른 프로그램 또는 다른 이유로 인해) paint()가 즉시 실행되지 않을 수 있으며 페인트()에 대한 여러 호출이 화면의 픽셀을 변경하기 위해 자신의 차례를 기다리는 대기열에 대기할 수 있습니다. 이 경우 모든 호출을 순서대로(및 항상 뒤처질 수 있음)으로 만드는 대신 Java는 가장 최근에 페인트()를 호출만 실행하고 다른 모든 호출을 건너뜁니다. 내가 자바를 본 첫 번째 일은 애니메이션이었다 : 거기에 큰 빨간 안녕! 오른쪽에서 왼쪽으로 화면을 가로 질러 실행됩니다. 그 단순한 형태의 애니메이션조차도 저를 멈추고 “정말 멋지다”고 생각하기에 충분했습니다.

페인트를 호출하지 마십시오자신의 코드에서 직접 구성 요소. 마찬가지로 그래픽 개체를 인스턴스화하지 마십시오- Java GUI 시스템은 코드에 필요한 그래픽 개체를 자동으로 전달합니다. 위의 예제에서 애니메이션은 이 클래스의 페이드인 및 페이드아웃 메서드를 호출하기만 하면 됩니다. 세터 메서드 setIncrement 및 setAnimationSpeed 및 setAlpha 메서드를 사용하여 초기 가시성을 설정하여 필요에 따라 타이밍을 조정할 수 있습니다. 이 클래스는 사용자 지정 도면에만 해당하지만 구성 요소의 페인트 방법을 신중하게 재정의하여 자식 구성요소를 애니메이션할 수 있습니다. 자세한 내용은 “GUI 스레드에 대한 교차 스레드 호출”의 Comp310 Java 리소스 페이지를 참조하십시오. Java 애플릿에서 깜박임을 방지하는 두 가지 주요 방법이 있습니다: 오늘 내내 애니메이션을 만들거나 일종의 동적 움직임을 수행하는 실제 애플릿의 많은 예제와 함께 작업할 수 있습니다. 애니메이션 믹스에 대해 알아야 할 부분이 하나 더 있으며, 그 스레드입니다. 이 단원의 후반부 (그리고 18 일째에 더 자세히 설명하는 “멀티 스레딩”)에서 스레드에 대해 자세히 설명하려고하지만 지금은 기본 아이디어가 있습니다 : Java 프로그램에서 지속적으로 실행되고 많은 처리 시간을 차지하는 모든 것은 i에서 실행되어야합니다. ts 자신의 스레드.