저는 픽셀 아트가 많은 게임을 만들고 있습니다. 내 게임의 표준 버튼은 약 12x12 픽셀이며 표시를 위해 5 배 확대되었습니다. 모든 문자는 화면에 따라 두 배 더 커집니다. 문제는 내가 이러한 모든 이미지를 업 스케일 된 비트 맵에 저장하면 Android에서 메모리 부족 오류가 발생한다는 것입니다. 드로잉을 할 때마다 크기를 조정하려고하면 게임이 너무 느리게 실행됩니다.안드로이드에서 효율적으로 확대 된 픽셀 아트를 그리는 방법은 무엇입니까?
그래서 내 자신의 PixelArtBitmap 클래스를 썼습니다. 큰 이미지를 얻고 메모리가 거의 필요하지 않지만 매우 비효율적이어서 내 fps가 많이 떨어집니다. 그리기를 할 때마다 비트 맵을 늘리는 것보다 여전히 빠릅니다. 여기에 클래스가 있습니다 :
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
class PixelArtBitmap{
private int[][] pixels = null;
private boolean[][] visible = null;
private float width = 0;
private float height = 0;
private float drawWidth = 0;
private float drawHeight = 0;
private int pixelsX = 0;
private int pixelsY = 0;
private static Paint boxPaint = new Paint();
public PixelArtBitmap(Bitmap bitmap, float scale){
boxPaint.setStrokeWidth(0);
pixels = new int[bitmap.getWidth()][bitmap.getHeight()];
visible = new boolean[bitmap.getWidth()][bitmap.getHeight()];
pixelsX = bitmap.getWidth();
pixelsY = bitmap.getHeight();
//Utility is an another class of mine, providing information about the device
drawWidth = scale * Utility.getScaleWidth();
drawHeight = scale * Utility.getScaleHeight();
width = pixelsX * drawWidth;
height = pixelsY * drawHeight;
for(int x = 0 ; x < bitmap.getWidth() ; x++){
for(int y = 0 ; y < bitmap.getHeight() ; y++){
pixels[x][y] = bitmap.getPixel(x,y);
if(Color.alpha(pixels[x][y]) == 0) visible[x][y] = false;
else visible[x][y] = true;
}
}
bitmap.recycle();
bitmap = null;
}
public void draw(float x, float y, Canvas canvas){
for(int drawY = 0 ; drawY < pixelsY ; drawY++){
for(int drawX = 0 ; drawX < pixelsX ; drawX++){
if(visible[drawX][drawY]){
boxPaint.setColor(pixels[drawX][drawY]);
canvas.drawRect(x + drawWidth * drawX, y + drawHeight * drawY,
x + drawWidth * (drawX + 1), y + drawHeight * (drawY + 1), boxPaint);
}
}
}
}
}
이렇게 클래스를 더 빨리 만들 수 있나요? 아니면 올바르게 다른 방법이 있습니까?
이 비트 맵을 화면에 그리려면''캔버스 ''를 사용하고 있습니까? 그렇다면''Canvas.drawBitmap (Bitmap, null, dstRect, Paint)''을 사용하여 런타임 중에 더 작은 비트 맵을 확대 해보십시오. 기본값이 아니라면''Paint'' 내에서 가장 가까운 이웃 배율을 가능하게하는 플래그가 있습니다. – harism
팁 주셔서 감사합니다. 최대한 빨리 시도하겠습니다. – Finnboy11
잘 작동하는 것 같습니다! 원하는 경우이를 솔루션으로 추가 할 수 있으며 동의 할 것입니다. – Finnboy11