[英]Strange Behavior with sceen sizes for different Android devices
我是一名大學生,從事Android開發的最終項目。
我的項目是一個簡單的蛇游戲,用戶可以使用加速度計或按鈕。
我的游戲視圖的工作方式是我在我的“SnakeView”上動態創建一個網格,它可以像這樣擴展視圖:
/**
* This is where we paint the grid and the game.
*/
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
if(created){
canvas.drawBitmap(mBitmap, 0, 0, mPaintScreen);
mBitmap.eraseColor(Color.WHITE);
for(int i = 0 ; i < xlength; i++){
for(int j = 0; j < ylength; j++){
int x = i * rectWidth;
int y = j * rectHeight;
Point p = new Point(i,j);
if(snake.contains(p)){
mBitmapCanvas.drawRect(x,y, x + rectWidth, y + rectHeight, mSnakePaint);
}else if(walls.contains(p)){
mBitmapCanvas.drawRect(x,y, x + rectWidth, y + rectHeight, mWallPaint);
}else if (growBerries.contains(p)){
mBitmapCanvas.drawRect(x,y, x + rectWidth, y + rectHeight, mGrowBerryPaint);
}
}
}
}
}
基本上我有一個包含蛇和我的漿果的arraylist。 如果平原上的點在任何一個arraylist中,我會將矩形繪制成不同的顏色。 否則我把飛機保持白色。
要設置rectWidth和height,請進入onSizeChanged方法。
@Override
public void onSizeChanged(int w, int h, int oldW, int oldH){
mBitmap = Bitmap.createBitmap(getWidth(), getHeight(),Bitmap.Config.ARGB_8888);
mBitmapCanvas = new Canvas(mBitmap);
mBitmap.eraseColor(Color.WHITE);
width = w;
height = h;
rectWidth = width / (xlength-1);
rectHeight = height / (ylength-1);
invalidate();
}
現在問題是塊不能在不同設備上格式化為正確的大小。 我已經在nexus 7平板電腦上測試了這個(不確定尺寸,但它的尺寸要大得多),而我的手機是pantech flex。 (大約4英寸)
如您所見,右側的那個,我創建的外邊框與屏幕寬度不匹配。 我想知道為什么會這樣。
我當然知道邊框正在擁抱我的網格,只是網格沒有展開以適應整個寬度。
這應該工作,尺寸應根據屏幕尺寸適合。 我唯一的猜測是int w和int h被舍入,並且它們不會保證實際的寬度和高度。 xlength和ylength是我想要的x和y方向的塊數。
我注意到如果我調整矩形的數量,它可能適合一個設備,而不是另一個設備,我只是希望它完全適合兩者!
如果更改矩形的大小會發生什么? 我的第一個猜測是rectWidth不能被屏幕的寬度整除,這就是邊界有空白的原因。
如果是這種情況,那么您可以通過將rectWidth和rectHeight定義為屏幕尺寸的函數來修復它(盡管如果你不小心這可能意味着不同的設備有不同大小的游戲區域。我不是確定你是否想要避免這種情況)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.