2014-01-24 3 views
0

Я программирую приложение для Android. Я использую Canvas, и я рисую Tilemap на нем, используя for-loops и рисуя каждый фрагмент один за другим.Как предварительно отобразить карту плитки для ее перерисовки позже?

Я хочу увеличить производительность, сделав эту перегородку (переднего плана и фона индивидуальной) раз и сохраните ее, чтобы я мог рисовать всю эту карту без петли, бросая каждую отдельную плитку.

Мой Графика Класс выглядит следующим образом:

public class AGraphics implements Graphics { 
    Bitmap frameBuffer; 
    Canvas canvas; 
    Paint paint; 
    ... 

    public AGraphics(.., Bitmap frameBuffer) { 
     this.frameBuffer = frameBuffer; 
     this.canvas = new Canvas(frameBuffer); 
     this.paint = new Paint(); 

    } 

    ... 
    public void drawPixmap(...){ 
     canvas.drawBitmap(((AndroidPixmap) pixmap).bitmap, ...); 
    } 

    ... 

} 

My World Class вызывает раздаточный Pixmap функции рисовать каждую плитку:

public class World { 
    ... 
    public void drawForeground (float posX, float posY){ 
     // get Graphics ... 
     for (int y = 0; y < map.height; y++) { 
      for (int x = 0; x <map.width; x ++) { 
       // calculate Positions 
       g.draw(tileset, (int)posX, (int)posY, srcX, srcY, tilesize, tilesize); 
      } 
     } 
    } 
    ... 
} 

Теперь я ищу способ, чтобы сохранить холст и перерисовать его каждый GameLoop в разных позициях, чтобы повысить производительность.

Любые идеи или рекомендации? Если вам нужна дополнительная информация, спросите!

Благодаря

ответ

0

Создание растрового изображения (один или столько, сколько нужно), используя Bitmap.createBitmap Создать холст на этой битовой карты с использованием Canvas canvas = new Canvas(bitmap) Draw в холст

в onDraw, рисовать готовые растровые изображения в выходной холст с использованием canvas.drawBitmap

+0

К сожалению, теперь у меня проблемы с памятью. Я попробую сделать это с меньшими размерами плиток так, чтобы общий размер изображения был меньше. Тогда я могу растянуть его, чтобы он вписывался в мой холст. (Я использовал 128x128px на Плитку и получил размер карты около 120x70 плит). – Headless

+0

Это ожидается. Вы ограничены в растровой памяти в 2-3 раза больше пикселей на экране – yoah