国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

8.10.檢測像素級別的碰撞

2024-04-27 13:52:04
字體:
供稿:網(wǎng)友
8.10.1. 問題
我需要檢查是否有帶有alpha 透明度的圖像區(qū)域與其他圖像發(fā)生碰撞。
8.10.2. 解決辦法
繪制兩個圖像到一個BitmapData 對象,并使用BitmapData.hitTest 方法。
8.10.3. 討論
BitmapData 對象擁有一個hitTest 方法,和DisplayObject 定義的hitTest 方法工作方法相似但有一個明顯的例外:而DisplayObject 的hitTest 方法返回true,如果點和對象的范圍相交,BitmapData 的hitTest 方法返回true,如果點的像素超過了某個透明度的門檻。這里是這個方法的特點:
+展開
-ActionScript
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

如果一個圖像是不透明的,他被這個方法認(rèn)為是一個完全不透明的矩形,兩個圖像必須被認(rèn)為是透明的才能執(zhí)行像素級碰撞測試。當(dāng)你測試兩個透明圖像時,alpha threshold 參數(shù)控制alpha 通道的值,從0 到255,被認(rèn)為是不透明的。這個方法的參數(shù)如下:
firstPoint:Point
BitmapData 圖像在任意坐標(biāo)空間的左上角位置。相同的坐標(biāo)位置被用來定義secondBitmapPoint 參數(shù)。

firstAlphaThreshold:uint
在這個測試中被認(rèn)為是不透明的最高的alpha 通道值。

secondObject:Object
一個矩形,點,位圖,或BitmapData 對象。

secondBitmapDataPoint:Point (default = null)
這個點定義了一個在第二BitmapData 對象中的像素位置。只有當(dāng)secondObject 的值是BitmapData 對象時使用這個參數(shù)。

secondAlphaThreshold:uint (default = 1)
在第二個BitmapData 對象中被認(rèn)為是不透明的最大的alpha 通道值。只有當(dāng)secondObject的值是BitmapData 對象并且兩個BitmapData 對象都是透明的時使用這個參數(shù)。

在下面的代碼例子中,每一個矩形圖形的角上,對一個帶有alpha 透明度的PNG 文件進行碰撞測試:
+展開
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="1500"
height="900">

<mx:Script>
<![CDATA[
import flash.display.BlendMode;
private var mainBmp:BitmapData;
private var dragBmp:BitmapData;
private var hasDrawn:Boolean = false;
private function loaded():void{
if(!hasDrawn){
mainBmp = new BitmapData(
mainImg.width, mainImg.height,true,0x00000000);
dragBmp = new BitmapData(
dragImg.width, dragImg.height, true, 0x00000000);
hasDrawn = true;
this.addEventListener(Event.ENTER_FRAME, showHits);
}
}
private function showHits(event:Event):void
{
mainBmp.draw(mainImg);
dragBmp.draw(dragImg);
if(mainBmp.hitTest(new Point(0,0), 0xff,
dragImg.getBounds(this).topLeft)){
trace(" true ");
return;
}
if(mainBmp.hitTest(new Point(0,0), 0xff,
dragImg.getBounds(this). bottomRight)){
trace(" true ");
return;
}
if(mainBmp.hitTest(new Point(0,0), 0xff, new
Point(dragImg.getBounds(this).left,
dragImg.getBounds(this).bottom))){
trace(" true ");
return;
}
if(mainBmp.hitTest(new Point(0,0), 0xff, new
Point(dragImg.getBounds (this).right,
dragImg.getBounds(this).top))){
trace(" true ");
return;
}
trace(" false ");
}

]]>
</mx:Script>
<mx:Image id="mainImgsource="../assets/alphapng.png"
cacheAsBitmap="true"/>

<mx:Image cacheAsBitmap="trueid="dragImg"
mouseDown="dragImg.startDrag(false, this.getBounds(stage)),
loaded()
rollOut="dragImg.stopDrag()"
mouseUp="dragImg.stopDrag()"
source="../assets/bigshakey.png"/>

</mx:Canvas>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昭通市| 宿松县| 丰顺县| 云梦县| 法库县| 阿拉尔市| 双流县| 呼伦贝尔市| 怀仁县| 深圳市| 广灵县| 罗定市| 南平市| 荥阳市| 胶州市| 娄烦县| 宁都县| 商河县| 乌鲁木齐县| 武乡县| 略阳县| 凤台县| 黄冈市| 青神县| 吴忠市| 民和| 黑河市| 文成县| 肥西县| 城市| 离岛区| 江达县| 日土县| 庄浪县| 柳江县| 渭南市| 阿城市| 合江县| 竹溪县| 黔江区| 增城市|