`

另类像素级精确选择对象法—蓝图法

 
阅读更多

from:http://bbs.9ria.com/forum.php?mod=viewthread&tid=16763

 

另类像素级精确选择对象法—蓝图法

 

本方法主要是运用bitmapData以及ColorTransform类。
  实现原理是把“层深值”图像化然后根据鼠标当前像素颜色值去取对象。

  至于为什么叫蓝图法,原因是这张用来判断的图片显示的时候基本全是蓝和黑色,要出现其他颜色的话对象数量就必须达到一个巨大的量。所以在同一层级不上万个对象的情况下图片基本就是蓝黑色的。实际用的办法比较另类,也是属于一时

 

突发奇想的结果。

判断对象主要分三种情况
1、全静态显示对象处理
2、动态显示对象处理
3、混合对象处理

 

一、全静态显示对象取得当前鼠标所在位置对象的过程如下:

正常版DEMO: 静态物体精确选择_正常版.swf
蓝图版DEMO: 静态物体精确选择_蓝图版.swf 

1、初始化对象。
2、建立对象索引表或者把需要判断的对象addChild到相应容器中。
3、创建一个蓝图的bitmapData尺寸是场景大小。
4、遍历某一层级容器下的显示列表比如stage的,前提是这个容器必须是DisplayObjectContainer子类。同时利用 ColorTransform类和DisplayObject对象的transform.colorTransform属性把对象设置成单色,颜色值等于 层深值。由于深度值在这个层级下肯定是唯一的,那么每个对象就变成了有唯一颜色的单色对象(完全透明区域不会变色,仍然保持完全透明)。
5、把单色对象按深度从小到大的顺序向蓝图bitmapData里draw(),draw()完再次设置DisplayObject对象的 transform.colorTransform属性为空把对象颜色恢复正常。最终循环完成的时一张蓝黑色的图片也就是蓝图就生成了。
6、生成的蓝图并不需要显示或者addChild到任何地方存在即可。
7、用enterFrame或者鼠标事件或者setInterval来作为触发来获得当前鼠标的X,Y坐标。
8、用bitmapData的getPixel(x,y)方法从蓝图中获取相应坐标的颜色值,也就是获得当前鼠标下那点的蓝图颜色。而这个颜色就是一个深度,那么直接stage.getChildAt()就可以方便的返回这个深度的对象了。

  全静态的蓝图只需要制作一次,因为里面的视觉元素根本不会变化。如果场景平移那么蓝图也相应平移即可。所以比较 消耗资源的就是初始化的时候,之后由于只调用了getPixel()和getChildAt()可以说速度相当优异(100000次循环在100毫秒以 内,那么单次大概0.001毫秒以下)。

二、动态对象获取

 

DEMO: 动态物体精确选择.swf 

 

基本原理和静态的相同,但是由于待选对象是运动的可能是动画可能是复杂移动,那么蓝图只做一次明显就无法满足。那么就需要随时刷新蓝图,但是如果对象过多 明显draw()这个占资源的东西会造成太多的系统消耗。那么我们就不要去把所有动态对象做进蓝图,只需要把鼠标点所在的那个点下的动态对象做成蓝图并取 色即可。
  这里获取当前点下的目标列表可以使用stage.getObjectsUnderPoint(point)方法。而获得对象深度值则使用getChildIndex(dislplayObject)来取得唯一颜色值。
  在触发判断的瞬间把列表中的对象变色并且取得鼠标坐标点颜色然后再把对象变回去。由于过程很快实际显示上不会有任何影响。

三、混合对象处理
  比如游戏场景中的房屋街道家具树木这些都是静态对象,而玩家敌人宠物或者一些场景动画就属于动态对象。混合处理就是把静态的做静态蓝图,再在对动态对 象获取的时候把静态对象从列表中排除。检测结果如果没有任何动态对象被选中再检测静态对象,毕竟静态对象只需要获取一次颜色就可以直接返回对象。

 

DEMO源代码: 像素级精确选择.rar

 

 

 

  • 大小: 68.6 KB
分享到:
评论

相关推荐

    像素工厂3_test_

    标题“像素工厂3_test_”可能指的是一个游戏或者软件的测试版本,像素工厂可能是游戏或应用的名字,而“3”可能代表这是该系列的第三个版本。"test"标签进一步确认了这是一个测试或试验阶段的产品,可能包含开发者...

    高级蓝图规划模版

    在IT行业中,蓝图规划是一种关键的管理工具,尤其在企业信息化建设、系统集成或业务流程改进等项目中扮演着至关重要的角色。"高级蓝图规划模版"提供的是一套全面的方法论,涵盖了项目启动、流程诊断、流程优化、流程...

    蓝图曲线.rar

    色彩管理的专业知识对于那些需要精确控制色彩输出的行业,如设计、摄影和印刷等,至关重要。正确使用icc文件能有效提高色彩一致性,减少因设备差异导致的颜色偏差,提升整体工作流程的效率和质量。

    蓝图艺术大师I

    8. **AI行为树**:介绍虚幻引擎4的AI行为树系统,通过蓝图创建智能行为,如巡逻、追逐和目标选择。 9. **优化和调试**:讨论蓝图性能优化技巧,以及如何使用虚幻引擎的调试工具查找和解决问题。 10. **项目实践**...

    unreal引擎蓝图代码

    Actor蓝图用于创建游戏对象,如角色、敌人或环境物体;Component蓝图则设计为可复用的模块,可以附加到Actor蓝图上,提供特定功能。 二、蓝图节点 1. 功能节点:执行特定操作,如计算、设置属性、触发事件等。 2. ...

    UE4艺术大师:蓝图 全套

    1. **蓝图类**:蓝图是基于C++类的,它们可以是Actor、Component或其他游戏对象的实例。蓝图类可以继承自引擎提供的基类或自定义的C++类,提供了一种灵活的定制方式。 2. **节点系统**:蓝图通过一系列节点进行逻辑...

    UE4蓝图节点详细介绍.zip

    蓝图是UE4的核心特性,它允许非程序员通过图形化界面进行逻辑编程,实现游戏对象的行为控制。这份"UE4蓝图节点详细介绍.zip"资源正是一份详细的UE4蓝图节点指南,对于初学者来说极具价值。 文档"UE4蓝图节点1.0.doc...

    排序小程序蓝图模型

    【标题】"排序小程序蓝图模型"揭示了这是一个关于编程的小程序设计,主要聚焦于排序算法的实现。在软件开发中,排序是数据处理的核心部分,它涉及到如何有效地组织和排列一组数值或对象。在这个Java蓝图中,开发者...

    中国石油SAP 业务蓝图建模手册

    - 企业流程图由多个功能对象组成,这些功能对象代表了一级流程,每个功能对象都有一个与之同名的一级流程图。 - 功能对象的SAPNetWeaver特性维护时,“SAP功能类型”设置为“场景(Scenario)”,而“SAP模型类型”...

    蓝图可视化脚本,离线API,蓝图节点查询工具,蓝图学习必备工具

    例如,在Unreal Engine中,蓝图系统广泛用于游戏逻辑和交互设计,用户可以创建功能丰富的游戏对象和行为,而无需深入学习C++。 2. 离线API: API(应用程序接口)是不同软件之间交互的桥梁,而离线API则是在没有...

    UE4蓝图可视化脚本

    这份文档,以CHM(Microsoft帮助文件)格式呈现,包含了三级目录结构,意味着它将深入探讨蓝图系统的各个方面,从基础概念到高级技术。CHM文件是一种便于查阅的电子书形式,通常包含索引、搜索功能,便于用户快速...

    UE4蓝图节点详细介绍

    蓝图系统由一系列节点组成,这些节点构成了逻辑流程图,用于控制游戏对象的行为。本篇文章将详细讲解UE4蓝图中的常见节点及其用法。 一、事件节点 事件节点是蓝图流程的起点,通常由外部事件触发,如游戏开始、用户...

    SAP业务蓝图理解供应链管理

    SAP业务蓝图是实施SAP系统的关键步骤,它为企业提供了一个详细描绘现有业务流程和未来目标状态的蓝图,旨在确保系统实施与业务需求的精确匹配。本文将深入探讨SAP业务蓝图在理解供应链管理中的重要作用。 首先,...

    UE4_LEJSON蓝图插件v4.19

    LEJSON插件提供了丰富的蓝图节点,如“解析JSON字符串”、“序列化对象到JSON”等,使得开发者可以直接在蓝图中进行JSON数据的读取、写入和转换。这些节点的操作直观易懂,只需将相应的JSON字符串或UE4对象拖拽到...

    UE4蓝图调用C++函数的工程分享

    在UE4(Unreal Engine 4)中,开发者可以结合蓝图和C++代码来构建游戏逻辑,这提供了灵活性和性能的平衡。本工程分享主要关注如何在蓝图中调用C++函数,分为两种主要方式:一是通过继承C++类的蓝图类直接调用,二是...

    UE4离线蓝图API

    蓝图可视化脚本,离线API,蓝图节点查询工具,蓝图学习必备工具

Global site tag (gtag.js) - Google Analytics