0

我是一名大学生,正在从事 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 英寸)

我的形象 我的图像2

如您所见,我创建的右侧外边框与屏幕宽度不匹配。我想知道为什么会这样。

我绝对知道边框正在拥抱我的网格,只是网格没有展开以适应整个宽度。

这应该可以工作,并且尺寸应该适合屏幕尺寸。我唯一的猜测是 int w 和 int h 是四舍五入的,它们不会突出实际的宽度和高度。xlength 和 ylength 是我想要在 x 和 y 方向上的块数。

我注意到,如果我调整矩形的数量,它可能适合一个设备,但不能适合另一个设备,我只是希望它完美地适合两个设备!

4

1 回答 1

2

如果改变矩形的大小会发生什么?我的第一个猜测是 rectWidth 不能被屏幕的宽度整除,这就是为什么沿边框有空格的原因。

如果是这种情况,那么您可以通过将 rectWidth 和 rectHeight 定义为屏幕尺寸的函数来修复它(尽管如果您不小心,这可能意味着不同的设备具有不同大小的播放区域。我不是确定你是否想避免这种情况)。

于 2012-11-28T23:25:16.480 回答