我是一名大学生,正在从事 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);
}
}
}
}
}
基本上我有一个包含蛇和我的浆果的数组列表。如果平原上的点在任一数组列表中,我将矩形涂成不同的颜色。否则我让飞机保持白色。
为了设置 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 方向上的块数。
我注意到,如果我调整矩形的数量,它可能适合一个设备,但不能适合另一个设备,我只是希望它完美地适合两个设备!