位图分析代码在2.2之前工作,而不是2.2

时间:2010-10-04 20:29:30

标签: android bitmap compatibility

我正在为我正在制作的游戏创建“地图”,并且它在< = Android 2.1上工作正常,但2.2会导致问题。

我不确定这是否是一种常用的方法,所以我会解释我在做什么。首先,我绘制用户将要看到的地图然后我绘制一个相同大小的地图,只有白色和粉红色(0xffFF006E)。我绘制粉红色的任何地方都是一个区域/边界,我不希望玩家能够进入/交叉。

因此,在游戏中,常规地图不断被绘制,粉红色的“边框图”被加载到位图中(但从未实际绘制过)。要查看玩家是否尝试越过边界,我会检查玩家的x,y pos与边框图:

private boolean overBorder(int x, int y){

   //The int 'COLOR_border' is predefined as 0xffFF006E
if(mPlayerDirection == UP && mMapBorders.getPixel(x, y-mPlayerHeight/2) == COLOR_border)return true;
if(mPlayerDirection == DOWN && mMapBorders.getPixel(x, y+mPlayerHeight/2) == COLOR_border)return true;
if(mPlayerDirection == LEFT && mMapBorders.getPixel(x-mPlayerWidth/2, y) == COLOR_border)return true;
if(mPlayerDirection == RIGHT && mMapBorders.getPixel(x+mPlayerWidth/2, y) == COLOR_border)return true;

   //If those fail, false    
   return false;
}

如果该代码返回true,我会停止播放器。就像我说的那样,这在2.2之前非常有效。如果有人对如何修复2.2兼容性有任何见解,我将非常感激。

1 个答案:

答案 0 :(得分:0)

可能与http://code.google.com/p/android/issues/detail?id=4710有关,并且颜色被报告为预乘或后乘。你确定你的位图有alpha通道吗?从那篇文章:

  

我想我可能找到了答案   我自己的问题。我只试过了   有一些测试代码,但似乎它   可能是解决方案。我在打电话   BitmapFactory.decodeResource(资源   res,int id)加载位图。一个电话   到Bitmap.hasAlpha()返回false。   所以,我进入了我的位图   Paint.NET,删除了一些颜色,和   重新保存。现在是hasAlpha()方法   返回true。 getPixel()和   setPixel()方法似乎返回   价值更像他们在1.6中所做的那样。所以,   我认为问题不在于   2.0,但实际上是1.6 - 因为它认为位图有一个   透明度颜色设置时没有。   我今晚要测试并报告我的   的调查结果。