【发布时间】:2010-07-24 20:54:54
【问题描述】:
我目前正在开发我的第一个 Android 应用程序和我的第一个游戏。我一直在使用 CliqXT (HVGA) 开发上网本。一切进展顺利,它在较小的屏幕上完美呈现。我知道在大屏幕上渲染时会遇到一些问题,但是我遇到的问题不是我所期望的,我有点卡住了。
所以基本上游戏由一个主 SurfaceView 组成,我将在其上渲染平铺的游戏世界。我按照本教程开始,我的结构仍然非常相似,只是它根据玩家位置计算边界:
http://www.droidnova.com/create-a-scrollable-map-with-cells-part-i,654.html
游戏也有玩家可以进入的各种建筑。进入后,它会为该特定建筑物启动另一项活动。构建活动只是具有在 XML 中定义的 Android UI 内容(按钮、TextViews 等)的普通视图。
我预期会发生什么:
所以我希望建筑 UI 能够在更大的屏幕上正确呈现。我在“dp”中指定了所有尺寸,在“sp”中指定了字体,希望它们能够正确缩放。我预计实际的游戏瓷砖地图通常可以正确渲染,但由于分辨率/ dpi 更高,可能真的很小。我正在使用与上面链接的教程非常相似的函数(calculateLoopBorders(),我的版本粘贴在下面)来计算基于屏幕高度和宽度(getHeight() 和 getWidth())要渲染的图块数量。
实际情况:
整个游戏只是被渲染为 HVGA。瓷砖地图和建筑 UI 只是缩小到较小的屏幕尺寸,在左侧、右侧和底部留下黑色边框(见图)。
如果有人能指出我正确的方向,将不胜感激,非常感谢!
(你们中的一些人可能认识这个公共领域的 DOS 经典)
编辑:感谢 Christian 修复代码格式。
mCellHeight 和 mCellWidth 是单元格的宽度/高度(以像素为单位)
mMapHeight 和 mMapWidth 是整个游戏世界的宽度/高度(以图块数量表示)
public void calculateLoopBorders() {
mWidth = getWidth();
mHeight = getHeight();
mStartRow = (int) Math.max(0, mPlayer.mRow - ((int) (mHeight / 2) / mCellHeight));
mStartCol = (int) Math.max(0, mPlayer.mCol - ((int) (mWidth / 2) / mCellWidth));
mMaxRow = (int) Math.min(mMapHeight, mStartRow + (mHeight / mCellHeight)) + 1;
mMaxCol = (int) Math.min(mMapWidth, mStartCol + (mWidth / mCellWidth));
if (mMaxCol >= mMapWidth) {
mStartCol = mMaxCol - (mWidth / mCellWidth);
}
if (mMaxRow >= mMapHeight) {
mStartRow = mMaxRow - (mHeight / mCellHeight);
}
int x1 = mStartCol * mCellWidth;
int y1 = mStartRow * mCellHeight;
int x2 = x1 + mWidth;
int y2 = y1 + mHeight;
mBgSrcRect = new Rect(x1, y1, x2, y2);
mBgDestRect = new Rect(0,0, mWidth, mHeight);
}
【问题讨论】:
标签: android compatibility