我是一名大学生,致力于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英寸)
myimage http://i45.tinypic.com/34r7lsy.png myimage2 http://i46.tinypic.com/fl98hi.png
如您所见,右侧的那个,我创建的外边框与屏幕宽度不匹配。 我想知道为什么会这样。
我当然知道边框正在拥抱我的网格,只是网格没有展开以适应整个宽度。
这应该有用,尺寸应根据屏幕尺寸调整。我唯一的猜测是int w和int h被舍入,并且它们不会保证实际的宽度和高度。 xlength和ylength是我想要的x和y方向的块数。
我注意到如果我调整矩形的数量,它可能适合一个设备,而不是另一个设备,我只是希望它完全适合两者!
答案 0 :(得分:2)
如果更改矩形的尺寸会发生什么?我的第一个猜测是rectWidth不能被屏幕的宽度整除,这就是边界有空白的原因。
如果是这种情况,那么您可以通过将rectWidth和rectHeight定义为屏幕尺寸的函数来修复它(尽管如果你不小心这可能意味着不同的设备有不同大小的游戏区域。我我不确定你是否想要避免这种情况。)