繁体   English   中英

不同Android设备的动态大小的奇怪行为

[英]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英寸)

MYIMAGE myimage2

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

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

这应该工作,尺寸应根据屏幕尺寸适合。 我唯一的猜测是int w和int h被舍入,并且它们不会保证实际的宽度和高度。 xlength和ylength是我想要的x和y方向的块数。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM