我有一个问题,并且我有潜在的解决方案。但我想确认是否有一种简单易行的方法来解决我的问题。
应用程序类型:
等距游戏
问题陈述:
我正在 Flash 应用程序中加载图像,并附加了鼠标事件。
我加载的图像是车辆、树木、建筑物等 Prop 图像,并且所有图像都是透明的。
示例:红球 Assets (请忽略我用来描述问题的黄色背景)
如果我点击实际图像区域(红色),那么一切都很完美
当我点击空白图像部分(或透明区域,我以黄色显示)时,我不想触发 mouseevent
我知道有一种方法是在 Flash 中创建蒙版。我不想这样做,除非这是最后的选择,因为我加载图像资源而不是 Flash 资源,而且我不这样做不想为所有 Assets 创建新的蒙版 Assets
我打算采用另一种方法,即使用 Bitmap 的 getPixel 方法。正在讨论here .
但是这个方法还有一个问题。
当我单击资源的空白部分时,我可能可以忽略单击事件,但如果图像后面同一位置有其他资源,那么我需要处理被遮挡图像的单击事件.
嗯,思考这个问题的解决方案让我想到了 getObjectsUnderPoint我可以在哪里扫描被遮挡的 Assets
最佳答案
嗯,您提出的解决方案 100% 有效。只需将确定单击哪个游戏对象的逻辑移到该对象之外即可。
- 在包含游戏对象的容器中监听
MOUSE_DOWN/MOUSE_UP
事件。 - 观看事件
- 使用
BitmapData.getPixel32
检查作为此事件目标的游戏对象此时是否透明 - 如果是,请使用
getObjectsUnderPoint
找出此时所有其他游戏对象 - 在循环中查找第一个此时不透明的对象
现在你得到了被击中的实际物体。
关于actionscript-3 - ActionScript 3 - 是否可以仅当鼠标单击图像部分时才触发单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546334/