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

首頁 > 網站 > WEB開發 > 正文

8.10.檢測像素級別的碰撞

2024-04-27 13:52:04
字體:
來源:轉載
供稿:網友
8.10.1. 問題
我需要檢查是否有帶有alpha 透明度的圖像區域與其他圖像發生碰撞。
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

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

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

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

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

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

在下面的代碼例子中,每一個矩形圖形的角上,對一個帶有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>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 星子县| 岚皋县| 安徽省| 黎平县| 宜春市| 田林县| 手游| 崇左市| 阜新市| 徐州市| 杂多县| 徐汇区| 汽车| 农安县| 固始县| 神池县| 新巴尔虎左旗| 贵南县| 神池县| 乌海市| 青龙| 崇信县| 安丘市| 荔浦县| 平山县| 涿鹿县| 张家港市| 封开县| 辰溪县| 如皋市| 太保市| 鄂伦春自治旗| 安达市| 佳木斯市| 疏附县| 汝州市| 中卫市| 泸水县| 济阳县| 通江县| 巴东县|