当我在同一个屏幕上绘制更多大约100-200个纹理时,设备会变得非常慢,应用程序会毫无例外地崩溃。你能告诉我在不影响性能的情况下拥有100个纹理的最佳方法吗。
- 我正在使用TextureAtlas中的TextureRegion
MainGame
public void render(SpriteBatch sb) {
// TODO Auto-generated method stub
// System.out.println("BallPoolGame Screen - render");
batch = sb;
sb.setProjectionMatrix(camera.combined);
sb.begin();
sb.draw(BACKGROUND_BALL_POOL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
cellManager.draw(sb);
ballManager.draw(sb);
sb.end();
}
private void setGameTextures() {
gameScreenAtlas = new TextureAtlas("data/texturetutorialpack.pack");
RED_BALL = gameScreenAtlas.findRegion("redball");
// RED_BALL.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
BLUE_BALL = gameScreenAtlas.findRegion("blueball");
// BLUE_BALL.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
GREEN_BALL = gameScreenAtlas.findRegion("greenball");
// GREEN_BALL.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
}
CellManager
public void draw(SpriteBatch sb){
batch=sb;
showImageTexture(MODEL1,207,1);
if(showSelectedCell){
if(allPossiblePathSize>0)
setupBoardCellTexture();
showImage(CELL_SELECTED, rowCoordinate[cellRow], colCoordinate[cellCol]);
}
}
private void setupBoardCellTexture(){
for(CellGrid c : masterGrid){
if(cellTextureIndicator[c.getRow()][c.getCol()]==1){
showImage(CELL_ALL_PATH_TEXTURE,c.getRowCoordinate() ,c.getColCoordinate() );
}
}
}
private void showImage(TextureRegion tr, float rowCoordinate, float colCoordinate) {
batch.draw(tr, colCoordinate,rowCoordinate);
}
BallManager
public void draw(SpriteBatch sb) {
batch = sb;
setupBoardBallTexture();
if (moveTheBall) {
updateBallPosition();
showImage(ball.getTextureRegion(), moveRow + 6, moveCol + 6);
}
squeezeBalls.draw(sb);
}
您缺少一些关于您的应用程序的基本数据,需要回答以下问题:
- 一个纹理的平均大小(大小:widthxheight)
- 此错误发生在哪个设备上(某些设备的填充率可能低于其他设备)
- TextureAtlas使用什么纹理过滤器(LINERAL、NEAREST…)
我猜你们正在尝试绘制许多纹理事件,如果它们在视线之外的话。如果是这种情况,则必须检查单元是否对摄影机可见。
另一种猜测是,您试图使用LINERAL TextureFilter绘制过多的元素。当使用线性作为纹理过滤器时,gpu需要比最近的点采样更多的点(我认为这是采样的4倍;所以理论上你的gpu绘制400-800个纹理;取决于图像大小,这对于移动gpu填充率来说太多了)
试着描述更多的情况,然后我可能会对你的问题有更多的了解。