, 자바로 데스크탑 용 Flappy bird를 다시 만들었습니다. 화면을 생성하고 화면을 생성하는 기둥을 만들었지 만 이제는 성능 문제가 하나 있습니다.JavaGame 캐릭터가 그림을 그리는 동안 정확하게 움직이지 않습니까? 개인 연습을 위해
가끔은 게임이 빨리 움직이지 않고 때로는 0.5 초 정도 걸리는 경우가 있습니다.하지만 그건 사실이 아닙니다. 새를 움직이면 이상하게 움직이며, 움직이는 것처럼 보입니다.
http://gyazo.com/d7e94c0b772192e5a5dd1d2b61b8c529
그 원인이 될 수 무엇 : 많은 기대 & 다음 뒷면에, MP4 형식으로 GIF를 볼? 이것이 내 게임 루프일까요, 아니면 그래픽을 그리는 방식일까요? 나는 이중 버퍼링을 사용하지 않는다. 단순히 jframe에서 .repaint를 호출하여 JPanel을 다시 그려서 렌더링한다.
게임 루프 :
private void gameLoop() {
new Thread() {
private long last;
private long start;
private int wait;
public void run() {
while(game) {
long now = System.nanoTime();
long length = now - lastLoop;
lastLoop = now;
double delta = length/((double) Constants.OPTIMAL);
lastFps += length;
fps++;
if (lastFps >= 1000000000) {
System.out.println("FPS: " + fps);
lastFps = 0;
fps = 0;
}
update(delta);
render();
this.sleep
}
}
private void sleep() {
try {
Thread.sleep((this.last - System.nanoTime() + Constants.OPTIMAL)/1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
내 도면 영역 :
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int translateAmount = this.game.getLevel().getTranslate();
g.translate(-translateAmount, 0);
this.background.render(g2d);
this.game.getLevel().renderLevel(g2d);
g.translate(0, 0);
this.game.getBird().render(g2d);
}
나는 배경을 렌더링하는 방법이있다 : 나는 한 후 배경 하나를 추가하고 배경 프레임의 외부에있는 경우 , 나는 그것을 렌더링하지 않을 것이다.
public void render(Graphics2D g) {
Iterator<RepeatedBackground> itr = this.repeats.iterator();
while (itr.hasNext()) {
RepeatedBackground b = itr.next();
if (this.game.getLevel().getTranslate() - b.getX() >= 300) {
itr.remove();
continue;
}
if (b.getX() - this.game.getLevel().getTranslate() < Constants.WIDTH) {
b.render(g);
}
}
}
이 내가 (내가 델타를 사용 해달라고이에 대한 몇 가지 튜토리얼을 사용) 내 새를 이동하는 방법입니다 : 새 또는 배경에 지연의 원인이 될 수 무엇
private void update(double delta) {
if (System.currentTimeMillis() - this.level.getTime() >= Constants.TRANSLATE_SPEED) {
// move background
this.level.updateTranslate();
this.level.setTime();
// move bird
this.getBird().move();
}
}
public void move() {
this.x += 2/1.10;
}
? 렌더링 방식이나 게임 루프에 문제가 있습니까?
FPS: 1724172
FPS: 1551857
FPS: 1494378
FPS: 1471987
FPS: 1434095
FPS: 1629905
'Constants.OPTIMAL'은 (으)로 설정되어 있습니까? 잠을 못 자? – MadProgrammer
@MadProgrammer 1000000000/FPS; 그 날 시간 초과 값을주는 것은 부정 – Artemkller545
Nevermind, 그 오류를 수정, fps는 지금 194-160에서 sutck이고 때로는 200 이상 점프. – Artemkller545