AIR对Mobile设备位图取色的问题

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:AIR对Mobile设备位图取色的问题
  • 本文链接:http://zengrong.net/post/1600.htm

AIR对Mobile设备位图取色的问题

在网页游戏开发中,我经常使用bitmapData.getPixel32来获得单击的部位的透明度值,以此来确定是否交互。

在PC平台中,这个用法是很靠谱的:

public function checkOpaque($x:Number,$y:Number):Boolean
{
    //如果没有图像,当然是透明的
    if(!this.bitmapData) return false;
    var __argb:uint = this.bitmapData.getPixel32($x,$y);
    //否则就判断透明度
    return  (__argb>>24&0xFF) > 0;
}

但是,到了Mobile平台上,这个方法就有问题,使用getPixel32获得透明部分的像素值,得到的是16777216!

这个值其实是2的24次方。也就是说,在Mobile平台上,getPixel32只能支持到24bit色彩!

那么,是不是我的设置不正确呢?在AIR项目配置文件中,可以设置colorDepth,默认值为16bit,将其设置为32bit,还是没有作用。

所以只能把判断函数改成这样了:

public function checkOpaque($x:Number,$y:Number):Boolean
{
    //如果没有图像,当然是透明的
    if(!this.bitmapData) return false;
    var __argb:uint = this.bitmapData.getPixel32($x,$y);
    trace('单击的像素的颜色:', __argb.toString(16));
    //手机上可能最大只能支持到24bit颜色,所以当颜色等于24bit颜色的最大值的时候,直接认为像素是透明的
    if(__argb == 0x1000000) return false;
    //否则就判断透明度
    return  (__argb>>24&0xFF) > 0;
}