私はアンドロイド開発の最終プロジェクトに取り組んでいる大学生です。
私のプロジェクトは、ユーザーが加速度計またはボタンを使用できる単純なヘビのゲームです。
私のゲームビューの仕組みは、次のようにビューを拡張する「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);
}
}
}
}
}
基本的に、ヘビとベリーを含む配列リストがあります。プレーン上のポイントがいずれかの配列リストにある場合、四角形を別の色でペイントします。それ以外の場合は、飛行機を白のままにします。
rectWidth と高さを設定するには、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 タブレット (寸法は不明ですが、はるかに大きい) と、パンテック フレックスである私の電話でこれをテストしました。(約4インチ)
ご覧のとおり、右側のもの、私が作成した外側の境界線が画面の幅と一致しません。なぜこれができるのだろうと思っていました。
境界線が私のグリッドを抱きしめていることは間違いありません。グリッドが幅全体に収まるように広がっていないだけです。
これは機能し、サイズは画面サイズに合わせて調整する必要があります。私の唯一の推測は、int w と int h が四捨五入されており、実際の幅と高さを反映していないということです。xlength と ylength は、x 方向と y 方向に必要なブロックの数です。
長方形の量を調整すると、一方のデバイスには収まるかもしれませんが、もう一方のデバイスには収まらないことに気付きました。両方に完全に収まるようにしたいだけです!