我最近为Android 2.3.3开发了一款游戏,奇怪的是我在不同的手机中发现了很少的奇怪的行为,
例如
爆炸精灵(256x256像素)分为4x4 = 16张图像,显示时显示为三星Galaxy Ace 2.3.3和三星Galaxy Y中的2x2图像,2.3.5 ,
此外,加速度计在索尼Xperia 2.3.3和三星Galaxy Ace中以偶然的形式工作..要么太慢(并且在3-4秒间隙后采取触摸手势)并且Android OS会抛出警报框说,应用程序没有响应,否则它太快了。
奇怪的是,游戏完全适用于三星S2 ,就像它在 VirtualBox 上播放一样..
请帮助我,b'cos这是我的大学项目,如果存在这样一个奇怪的问题,我甚至无法将其投入市场!!
先谢谢!!
答案 0 :(得分: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的图像时,这样他们将使用标尺测量相同的长度在具有不同像素密度的屏幕上。例如,如果在Galaxy S2上具有128x128像素的图像长2cm,宽2cm,则在Galaxy Ace上应该是2cm长和2cm宽。然而,为了覆盖Galaxy S2上的更多像素,当在Galaxy S2上绘制时,它被调整为192 x 192像素,因为它作为Android系统的DPI知道它是ADP1(HTC Dream)的DPI的240,1.5倍。同样,图像将在Galaxy Ace或Galaxy Y上调整为96 x 96。
遗憾的是,canvas.drawImage
中的源矩形指的是已调整大小的位图中的像素数。这意味着代码示例中使用的相同源矩形覆盖Galaxy Y上的像素数量是Galaxy S2上的4倍。我想你在问题中描述“相同的精灵文件看起来像是在低DPI设备上以2x2分割,但应该除以4x4”。
以下示例说明了当我尝试使用具有不同DPI的设备复制问题时会发生什么。 我无法发布图片,因此我将图片放在这里(这是我的博客):
http://edgeofmap.com/blog/2013/05/android-bitmap-over-devices-of-different-dpis/
答案 1 :(得分:0)
不确定如何处理图形问题,但对于加速度计,每个设备的行为都不同。在onSensorChanged()中使用event.sensor.getMaximumRange()
来获取最大值,并根据该值或其百分比来确定您的操作。