flash 基于位图的碰撞检测问题
答案:2 悬赏:50
解决时间 2021-12-22 02:40
- 提问者网友:剪短发丝
- 2021-12-21 16:52
我制作了一个雪花飘落的FLASH小程序,里面包含了一些简单的碰撞检测,比如画一个简单的小房子,让雪花可以堆积在房顶上。但是我突然想到一个问题,假设,我导入一张位图,比如说一张照片,在FLASH当中,能否实现基于位图里面内容的碰撞检测?举个例子,我导入了一张人物的照片,能否让雪花堆积在照片里人物的脸上,头发上,手上?如果能,该如何实现?
最佳答案
- 二级知识专家网友:青灯壁纸妹
- 2021-12-21 18:22
北京优普天下 upflash老师为你解答
flash碰撞常用三种。
●两个显示对象碰撞 a_mc.hitTestObject(b_mc)
●一个显示对象和一个点碰撞 a_mc.hitTest(x,y,true)//true表示绘制部分碰撞,否则为矩形碰撞
●还有一个就是位图级别的碰撞。hitTest () 方法
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
语言版本: ActionScript 3.0
运行时版本: AIR 1.0, Flash Player 9
在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。 根据定义,点击区域是指一个不透明像素或两个重叠的不透明像素上的点或矩形的重叠部分。在执行点击测试时,将不会考虑两个对象中任何一个对象的拉伸、旋转或其它变形。
如果某个图像是不透明图像,则此方法会将其视为完全不透明的矩形。 两个图像必须是透明图像才能执行判断透明度的像素级点击测试。 当您在测试两个透明图像时,Alpha 阈值参数将控制哪些 Alpha 通道值(从 0 到 255)将被视为是不透明的。
参数 firstPoint:Point — 任意坐标空间中 BitmapData 图像的左上角的位置。 在定义 secondBitmapPoint 参数时,使用了相同的坐标空间。
firstAlphaThreshold:uint — 最小的 Alpha 通道值,此点击测试将其视为不透明的。
secondObject:Object — 一个 Rectangle、Point、Bitmap 或 BitmapData 对象。
secondBitmapDataPoint:Point (default = null) — 一个点,用于定义第二个 BitmapData 对象中的一个像素位置。 仅当 secondObject 的值是 BitmapData 对象时使用此参数。
secondAlphaThreshold:uint (default = 1) — 最小的 Alpha 通道值,它在第二个 BitmapData 对象中被视为不透明的。仅当 secondObject 的值是 BitmapData 对象,并且这两个 BitmapData 对象都为透明时使用此参数。
返回 Boolean — 如果发生点击,则值为 true;否则为 false。
引发 ArgumentError — secondObject 参数不是 Point、Rectangle、Bitmap 或 BitmapData 对象。
TypeError — firstPoint 为空。
示例
下例将创建一个仅在矩形区域 (20, 20, 40, 40) 中不透明的 BitmapData 对象,然后调用 hitTest() 方法,且使用 Point 对象作为 secondObject。 在第一次调用中,Point 对象定义 BitmapData 对象的左上角,是透明的;在第二次调用中,Point 对象定义 BitmapData 对象的中心,是不透明的。
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
var bmd1:BitmapData = new BitmapData(80, 80, true, 0x00000000);
var rect:Rectangle = new Rectangle(20, 20, 40, 40);
bmd1.fillRect(rect, 0xFF0000FF);
var pt1:Point = new Point(1, 1);
trace(bmd1.hitTest(pt1, 0xFF, pt1)); // false
var pt2:Point = new Point(40, 40);
trace(bmd1.hitTest(pt1, 0xFF, pt2)); // true
flash碰撞常用三种。
●两个显示对象碰撞 a_mc.hitTestObject(b_mc)
●一个显示对象和一个点碰撞 a_mc.hitTest(x,y,true)//true表示绘制部分碰撞,否则为矩形碰撞
●还有一个就是位图级别的碰撞。hitTest () 方法
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
语言版本: ActionScript 3.0
运行时版本: AIR 1.0, Flash Player 9
在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。 根据定义,点击区域是指一个不透明像素或两个重叠的不透明像素上的点或矩形的重叠部分。在执行点击测试时,将不会考虑两个对象中任何一个对象的拉伸、旋转或其它变形。
如果某个图像是不透明图像,则此方法会将其视为完全不透明的矩形。 两个图像必须是透明图像才能执行判断透明度的像素级点击测试。 当您在测试两个透明图像时,Alpha 阈值参数将控制哪些 Alpha 通道值(从 0 到 255)将被视为是不透明的。
参数 firstPoint:Point — 任意坐标空间中 BitmapData 图像的左上角的位置。 在定义 secondBitmapPoint 参数时,使用了相同的坐标空间。
firstAlphaThreshold:uint — 最小的 Alpha 通道值,此点击测试将其视为不透明的。
secondObject:Object — 一个 Rectangle、Point、Bitmap 或 BitmapData 对象。
secondBitmapDataPoint:Point (default = null) — 一个点,用于定义第二个 BitmapData 对象中的一个像素位置。 仅当 secondObject 的值是 BitmapData 对象时使用此参数。
secondAlphaThreshold:uint (default = 1) — 最小的 Alpha 通道值,它在第二个 BitmapData 对象中被视为不透明的。仅当 secondObject 的值是 BitmapData 对象,并且这两个 BitmapData 对象都为透明时使用此参数。
返回 Boolean — 如果发生点击,则值为 true;否则为 false。
引发 ArgumentError — secondObject 参数不是 Point、Rectangle、Bitmap 或 BitmapData 对象。
TypeError — firstPoint 为空。
示例
下例将创建一个仅在矩形区域 (20, 20, 40, 40) 中不透明的 BitmapData 对象,然后调用 hitTest() 方法,且使用 Point 对象作为 secondObject。 在第一次调用中,Point 对象定义 BitmapData 对象的左上角,是透明的;在第二次调用中,Point 对象定义 BitmapData 对象的中心,是不透明的。
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
var bmd1:BitmapData = new BitmapData(80, 80, true, 0x00000000);
var rect:Rectangle = new Rectangle(20, 20, 40, 40);
bmd1.fillRect(rect, 0xFF0000FF);
var pt1:Point = new Point(1, 1);
trace(bmd1.hitTest(pt1, 0xFF, pt1)); // false
var pt2:Point = new Point(40, 40);
trace(bmd1.hitTest(pt1, 0xFF, pt2)); // true
全部回答
- 1楼网友:糜废丧逼
- 2021-12-21 19:27
位图的图像更容易模拟照片的真实效果。其工作方式就像是用画笔在画布上作画一样。如果将这类图形放大到一定的程度,就会发现它是由一个个小方格组成的,这些小方格被称为像素点。一个像素点是图像中最小的图像元素。根据情况而定,有些地方需要用到位图。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯