방금 Conway의 Game of Life Java를 작성했으며 Android 휴대 전화 (Nexus 4)에서 응용 프로그램을 테스트하고 싶습니다. 테스트를 위해 SpriteBatch에 FPS, 자이로, 셀 셀 및 기타 데이터를 표시하는 BitmapFont를 그립니다. PC에서 GOL 논리가 얼마나 빨리 작동하는지에 따라 ~ 500 ~ 4000FPS가 있습니다. 그러나, 안드로이드에서 시작한다면, FPS는 10-15로 떨어집니다. 거의 모든 최고 속도로 GOL 논리를 사용하여 ShapeRenderer (모든 주요 직사각형을 렌더링하는 기본 클래스)를 끄면 FPS는 지속적으로 60에 있습니다 (Nexus에서 VSync를 끌 수는 없다고 생각합니다.) 4).LibGDX - ShapeRenderer가 너무 느림/Android에서 낮은 FPS
여기 내 질문 : 왜 ShapeRenderer가 그렇게 비효율적입니까? 내 셰이프를 렌더링하는 데 또 사용해야 할 것은 무엇입니까?
내 (매우 간단) 우편 번호와 사진을 렌더링 :
this.setColor(new Color(1, 0, 0, 1));
for (int i = 0; i < grid.getX_length(); i++) {
for (int j = 0; j < grid.getY_length(); j++) {
if (cells[i][j].getState()){ // checks if the cell is dead or alive
this.setColor(new Color (0,0,0,1));
rect(i * size, j * size, size-gap, size-gap); // draws it.
}
(http://s14.directupload.net/images/140929/qc3uu8ew.png)
내 안드로이드 전화에 ShapeRenderer 아무 문제가 없습니다. 모든 프레임에서 사각형을 다시 생성하지 않고 SpriteBatch.draw()를 사용하여 작은 png 텍스처를 렌더링 할 수 있습니까? 더 효율적 일지는 모르겠지만 시도해 볼만한 가치가 있습니다. –
우선, 약 100 만회 동안 모든 프레임마다 새로운 Color 객체를 만들지 마십시오. 변수에 색상을 저장하기 만하면됩니다. 그렇지 않으면 성능을 저하시키는 쓰레기 수거가 많이 있습니다. 또한 RAM 내부에 많은 수의 객체를 만들어 성능을 저하시킵니다. Idon't는 이것이 문제 다라고 생각한다. 그러나 그것은 meight chance 무언가 벌써있다. 전체 수업을 보여줘. 아마도 도움이 될 것입니다. – BennX
두 분 모두에게 감사드립니다. 이제 작은 .png를 그리고 Color 변수를 사용합니다. 안드로이드에서, 나는 마침내 60 FPS를 가지고 있고 PC에 FPS-Rate는 50-100 % 증가했다. –