【问题标题】:Android Game working differently in different Android PhoneAndroid 游戏在不同的 Android 手机中的工作方式不同
【发布时间】:2012-05-06 07:36:14
【问题描述】:

我最近开发了一款适用于 Android 2.3.3 的游戏,但奇怪的是我发现很少有不同手机中的奇怪行为

例如

  1. 分解为 4x4=16 图像的爆炸精灵(256x256 像素),在 Samsung Galaxy Ace 2.3.3 和 Samsung Galaxy Y, 2.3.5 中显示为 2x2 图像,

  2. 此外,加速度计在 Sony Xperia 2.3.3 和三星 Galaxy Ace 中以随意的形式工作。要么太慢(并且在 3-4 秒间隔后进行触摸手势),而且 Android 操作系统会抛出警报框说,应用程序没有响应,否则它太快了。

奇怪的是,游戏在三星 S2 上完美运行,就像在 VirtualBox 上玩一样..

请帮帮我,因为这是我的大学项目,如果存在这种奇怪的问题,我什至无法将其投放市场!!

提前致谢!!

【问题讨论】:

  • 您能发布一些用于绘制爆炸精灵的代码吗?
  • 您指的是哪款 Sony Xperia 设备?
  • int srcX = column * width_explosion; int srcY = 行 * height_explosion;矩形 src = new Rect(srcX, srcY, srcX + width_explosion, srcY + height_explosion); Rect dst = new Rect((int) (x1 - width_explosion / 2), (int) (y1 - height_explosion / 2), (int) (x1 + width_explosion / 2), (int) (y1 + height_explosion / 2)) ; canvas.drawBitmap(random_explosion, src, dst, null);列 = ++列 % 4;如果(列 == 0){ 行++; } if (row == 4) { explode_drawn = true;行 = 0; }

标签: android sprite accelerometer


【解决方案1】:

我想我对图形问题也有同样的经历:

根据您的代码,我猜您可能已经根据您在图像编辑器中看到的图像高度/宽度预先计算了“width_explosion”和“height_explosion”,并在不同设备上使用了相同的值。

您列出的设备有两个不同的 DPI 值,如 Android 所知:240,或 MDPI (Galaxy S2) 和 120,或 LDPI(Galaxy Ace 和 Galaxy Y)。请注意,Galaxy S2 的 DPI 正好是 Ace 和 Y 的两倍。

Android 可帮助应用作者处理图像,从而为他们提供便利。当通过getDrawable 从资源中读取图像并准备好在屏幕上渲染时,Android 调整大小相对于 160DPI 的图像,以便它们将具有相同的长度用尺子测量 em> 在具有不同像素密度的屏幕上。例如,如果一张 128x128 像素的图像在 Galaxy S2 上为 2 厘米长和 2 厘米宽,那么在 Galaxy Ace 上它应该是 2 厘米长和 2 厘米宽。然而,为了覆盖 Galaxy S2 上的更多像素,在 Galaxy S2 上绘图时,它的大小调整为 192 x 192 像素,因为它的 DPI 为 Android 系统所知道的 240,是 ADP1 (HTC Dream) DPI 的 1.5 倍。同样,在 Galaxy Ace 或 Galaxy Y 上,图像将被调整为 96 x 96。

不幸的是,canvas.drawImage 中的源矩形指的是 resized 位图中的像素数。这意味着代码示例中使用的相同源矩形在 Galaxy Y 上覆盖的像素是 Galaxy S2 上的 4 倍。我猜你在问题中描述的是“同一个精灵文件看起来像是在低 DPI 设备上被分割为 2x2,但它应该被分割为 4x4”。

以下示例说明了当我尝试使用具有不同 DPI 的设备复制您的问题时会发生什么。 我不能发布图片,所以我把图片放在这里(这是我的博客):

http://edgeofmap.com/blog/2013/05/android-bitmap-over-devices-of-different-dpis/

【讨论】:

    【解决方案2】:

    不确定如何处理图形问题,但对于加速度计,每个设备的行为不同。在你的 onSensorChanged() 中使用event.sensor.getMaximumRange() 来获得最大值,并以此或其中的百分比为基础采取行动。

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 2018-12-22
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多