자바 FX 게임 개발 효율 에 대한 간단 한 설명
3839 단어 JavaFX
한동안 블 로 그 를 쓰 지 않 았 지만 모든 것 이 일사 불 란 하 게 진행 되 고 있다.
그동안 일이 없 었 을 때 자바 FX 기반 게임 엔진 인 WJFXGameEngine 의 효율 을 최적화 시 켰 습 니 다 (개인 블 로그 의 예 는 다시 올 리 지 않 았 습 니 다). 간단 한 2D 게임 은 제 PC 에서 가장 빨리 실행 하면 750 - 800 FPS 에 달 할 수 있 습 니 다.다음은 자바 FX 게임 개발 의 기본 적 인 문 제 를 간단히 이야기 하 겠 습 니 다.
JavaFX 공식 게임 예제 인 BrickBreak 를 본 사람들 은 이 게임 의 그리 기와 논 리 는 Timeline 에서 진행 되 었 다 는 것 을 알 수 있다.자바 FX 의 타임 라인 은 내 가 사용 한 경험 에 따 르 면 효율 이 높 지 않 고 수량 이 너무 많 으 면 끊 길 수 있다.제 게임 엔진 에서 현재 의 간단 한 애니메이션 은 Timeline 으로 이 루어 졌 고 앞으로 크게 바 뀔 것 입 니 다.
그리고 이전 튜 토리 얼 에서 자바 FX 의 간단 한 게임 프레임 워 크 에서 도 타임 라인 을 사용 했다.이것 은 실제로 매우 심각 한 문제 다.자바 FX 공식 예제 에 의 해 오도 되 었 다.
현재 제 변경 사항 은 두 라인, 한 라인 처리 로 그립 니 다. 한 라인 처리 업데이트 작업 (이것 도 많은 게임 엔진 이 자주 사용 하 는 방법 입 니 다. 예 를 들 어 Android 게임 엔진 AndEngine) 입 니 다.물론, 그리 기 처 리 는 자바 FX MainThread 에서 실행 되 어야 하기 때문에 저 희 는 Platform. runLater 를 사용 하여 그리 기 동작 을 호출 합 니 다.주 스 레 드 에서 실행 되 고 있 지만 업데이트 속도 가 훨씬 빠 릅 니 다.기 존 에 했 던 자바 FX 게임 예시 에 서 는 총알 이 끼 는 등 현장 이 자주 나 왔 는데 이 제 는 나타 나 지 않 는 다.
다음은 예제 코드 입 니 다.
drawThread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
try {
Thread.sleep(waitTime);
} catch (Exception e) {
}
Platform.runLater(new Runnable() {
@Override
public void run() {
draw(getGraphicsContext2D());
}
});
if (fpsMaker != null) {
fpsMaker.makeFPS();
}
}
}
});
updateThread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
try {
Thread.sleep(waitTime);
} catch (Exception e) {
}
update();
}
}
});
이것 은 제 WScreen 클래스 의 코드 입 니 다.
스 레 드 대기 시간 wait Time 이 낮 을 수록 FPS 가 빨 라 집 니 다.
FPS 가 빠 르 면 또 다른 문제 가 있 습 니 다.업데이트 작업 이 잦 기 때문에 업데이트 등 작업 에서 도 move (4) 같은 방법 을 사용 하면 속도 가 매우 빠르다 는 것 을 알 게 될 것 입 니 다.
그리고 FPS 가 안정 적 인 것 도 아니 기 때문에 서로 다른 설정 의 컴퓨터 에서 운행 하 는 상황 의 차이 가 매우 크다 는 것 을 알 게 될 것 이다. 그러면 우 리 는 또 다른 개념 인 Delta Time 을 사용 해 야 한다.
델 타 타임 은 지난번 업데이트 시간 을 기록 했다.우리 가 매번 이동 하 는 속도 * Delta Time 은 프레임 율 의 영향 을 받 지 않 는 속도 로 이동 할 수 있다.
물론 델 타 타임 은 거의 모든 게임 엔진 이나 프레임 워 크 에 이런 개념 을 가지 고 있다. 예 를 들 어 내 가 예전 에 사 용 했 던 마이크로소프트 의 XNA 게임 프레임 워 크, 현재 일 하고 있 는 유 니 티 3D 개발 등 이다.
FPS 가 751 에 이 르 렀 고 같은 예 를 들 어 그 전에 효율 적 으로 발생 한 카드 문 제 를 잘 해결 한 것 을 볼 수 있다.
본인 의 수준 이 제한 되 어 있 기 때문에 이 부분 은 참고 만 할 수 있 습 니 다.엔진 이 라면 Graphics 는 한 층 의 패 키 징 을 할 수 있 습 니 다.앞으로 효율 성 이 떨 어 지면 다른 OpenGL 등의 패 키 징 을 할 수 있다.
전재 출처 를 밝 혀 주 십시오: http://blog.csdn.net/ml3947
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Eclipse에서 javaFX 도입 (2020-4 월)javaSE에 javaFX가 동봉되지 않게 되어, 기존의 방법으로는 잘 되지 않는 것이 있는 것 같고, 도입에 망설였으므로 나중의 참고가 된다고 생각. 초보자이므로 손 부드럽게. macOS Catalina Eclip...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.