国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

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

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

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

secondAlphaThreshold:uint (default = 1)
在第二個BitmapData 對象中被認為是不透明的最大的alpha 通道值。只有當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ā)表
主站蜘蛛池模板: 英超| 石家庄市| 天门市| 宁蒗| 平凉市| 繁昌县| 基隆市| 定日县| 屯留县| 长沙县| 南江县| 霍城县| 德州市| 洛阳市| 库车县| 贵定县| 浦城县| 泊头市| 莱州市| 太原市| 井冈山市| 江源县| 蓝田县| 抚州市| 峨眉山市| 瓦房店市| 榆社县| 玉屏| 巴林右旗| 全椒县| 鸡泽县| 贞丰县| 合阳县| 临泉县| 华池县| 济南市| 万源市| 盘山县| 思南县| 集贤县| 西平县|