由于中间隔了一个年假,所以这两周都没有更新,今天来一起学习一下kanzi的属系统,由于内容太多,本文只讲解一些概念和在kanzi studio中的使用,下一次会分享在kanzi engine中的使用。

从前面的学习中,我们也接触到了kanzi一些节点的属性,比如在Scene下新建一个3D的正方体,我们左键选中这个节点,就会在右边的面板里显示该节点的属性,如下图:

有了这些属性的好处就是我们可以通过数值、枚举等将节点的一些特点进行详细的定义,便于描述和修改。

就像是介绍一个人,怎么样我们才能将他介绍清楚呢,很明显,我们要告诉别人他的名字,性别,身高,年龄等等特征,这样就可以很好的让别人来了解这个人,这些东西是每个人都会有的,所有称为人的共有“属性”。但是,在一些特殊的场合,可能会需要一些特别的属性,比如,如果他是一名老师,别人可能想知道他的职称是什么呀,但是职称并不是所有人都有的呀,这个就是老师的特有的“属性”。为了便于交流沟通,我们会预先为一类事物定义一些属性,这些属性是这一类事物所共有的,比如上述人的姓名,性别等,老师的职称等,但是,某些特殊的场合,我们又需要一些特殊的“属性”才能更好的把事物描述清楚,比如某个人放假了,放了几天呀,这个一般在描述他人的时候不问提到,所有就没有进行预定义,那怎么办,也分一类人嘛?如果别人想问假期有多少天?上了几年学,几年级等等呢?这个时候我们发现为了一些特殊场合才用到的“属性”专门分一类人是不合理的,因为我们无法预料的专门详细。那怎么办,我们就提供一种方法可以给事物在定义属性的权利不就ok了嘛,这样的话,就可以根据场合和需求的不同,自己定义一些特殊的“属性”。那么又有人会问了,既然能够自定义“属性”,我们干嘛还去预制一些属性呢?这个一是为了复用,比如,你是个媒婆,给人家姑娘介绍一个老师,想了一遍要描述他哪些方面,哪些特点,结果姑娘听了不满意,你又给她介绍另外一个,巧了,还是老师,难道你还要再去想一遍要怎么介绍了,这样是不是太麻烦了,完全可以把老师基本的信息介绍一遍,其他的就是他特有的一些自定义的“属性”了,这样是不是事半功倍呀。二是便于统一,便于管理。同是姓名,有人可能说是名字,有人说是姓名,有人说是称号,大名啥的,是不是很乱呀,简单和别人介绍也就算了,但是如果想把这些信息记录管理,是不是太麻烦了。解决了描述事物的属性的问题了,但是还有一个问题,比如,给一群来相亲的人每人发了一份表格填一下他们的个人信息,结果就姓名这一项就填的乱七八糟。有人用简体中文写,有人用繁体写,还有一些特立独行的非要用英文来写,谁叫人家起了个英文名字呢,还有一些装b的,没英文名字,非要用拼音来写。。。所以就姓名这一项,我们就要规定一下,都要用简体中文,但是如果在国外呢,可能就不一样了,就要求英文名字了。年龄的话,也要规定一下,大于0小于150的整数,而且要是数字。做的这些规定限制是什么呢,这个就是“属性类型”,用于量化指定属性。有了属性和属性类型,我们可以方便的描述事物了,但是在某些情况下,事物的属性可能发生了改变,比如,你给领导送礼了,领导拿人手短,就提拔你了,那你的职位就要改变了,这个时候,人事同志就要在公司人力档案上去修改你的职位,如何去修改呢,就要根据你的姓名,找到你的记录,修改你的属性(其实这就和我们使用kanzi engine来修改某个节点的属性是一样的)。闲扯了这一段,基本概括了今天的内容,kanzi的属性系统用来干嘛的,如何在kanzi engine中查找想要的节点并修改其指定属性,还有如何自定义属性。接下来,我们来详细看看。

属性系统

属性系统为指定和检查节点的状态、外观和行为提供了方法。比如,一个属性可以定义节点的颜色,表示一个按键是否被按下,或者指定一个节点的对齐方式等。尽管你不了解属性系统是如何工作的,但是你只要在kanzi studio设置了属性,你就可以在代码中去获取修改使用这个属性。但是,为了充分利用属性系统的一些特性,你还是要去熟悉属性系统是如何工作的。属性系统为访问kanzi节点的数据提供了统一的方式,因此,很多kanzi的子系统可以去操作这些数据。比如,你可以让一个属性值做一个动画改变,提供属性中间的绑定,监控属性值的改变。任何属性值都可以被多个输入源影响改变。属性系统定义了如何去如何解决受所以输入影响之后的属性值和如何解决当前的属性值的规则。比如,你可以直接去指定一个属性的值,但是一些属性可能有默认的值,风格也可能会影响属性的值,它们可能还会被动画和状态管理机制修改。通过提供自动应用的规则,最最大的减少了用户必须手动修改属性的地方。

属性使用

Kanzi里大多数属性定义在使用它们的类中。这些属性在定义的地方来配置事物的外观、状态和行为。比如,Text Block节点力的Text属性定义了节点绘制的文本,Visible属性定义节点和它派生节点的可见性。

但是,有一些Kanzi 属性用来配置其他节点的外观、状态和行为。比如,在materials定义Diffuse Color属性可以改变使用该material节点的外观,在Grid Layout里定义Row和Column属性,它们并不用来设置Grid Layout节点自己,而是分配Grid Layout下的子节点。

属性类型

每一个属性都有一个描述的属性类型。在属性使用中,它的属性类型是唯一的,属性的名字和属性值的类型都有该属性来保存。这个属性类型也就定义了该属性值的类型。比如,Node.Visible这个属性用于Node这个类和它的衍生类中。你就可以通过属性名字(Node.Visible)在运行时去查找属性类型。因为这个属性类型是布尔类型的,它只接收true和false。那么接下来,我们来看看kanzi支持的属性类型有哪些:

  • Boolean stores values True or False and has no type-specific properties.
  • Color stores color information for red, green, blue, and alpha channels (RGBA).
    Note that even though in Kanzi Studio you can set color values for hue, saturation, light, and alpha channels (HSLA), Kanzi stores them in RGBA. This means you can animate only RGBA values.
  • Enumeration stores a set of key value pairs, so that each unique key resolves to a unique integer.
  • Float stores single precision floating point values.
  • Integer stores 32-bit signed integer values.
  • Matrix 3x3 stores 3x3 matrices of floating point numbers, which you can use to store transformations for 2D nodes.
  • Matrix 4x4 stores 4x4 matrices of floating point numbers, which you can use to store transformations for 3D nodes.
  • Message represents messages, which you can use to add message triggers for application event messages.
  • Project Item stores references to objects and does not have type-specific properties. You can use Project item data type only in application code, for which Kanzi converted the property into the path of the target in a string format.
  • Property Type stores references to other property types. You can use Property type data types only in application code, for which Kanzi converts the property into the name of the target in a string format.
  • Text stores plain text and does not have type-specific properties.
  • Vector 2D stores vectors of two floating point numbers.
  • Vector 3D stores vectors of three floating point numbers.
  • Vector 4D stores vectors of four floating point numbers.

    注意,在kanzi studio中可能有更多专业的属性类型,但是它们都来源于上述列举的数据类型。比如,枚举变量就是代表限制了范围的整形而已。

    默认属性值

    每个属性都定义它的默认属性值。如果没有直接或者间接指定(通过风格,继承等等)属性值的话,当被查找的时候,kanzi会返回属性的默认值。比如尽管Node.Visible属性没有在每个节点中指定为true,但是这个属性值默认就是true。所以当被查询的时候,所以节点默认都是可见的。

    在开发App的时候,使用默认属性而不用去指定数值,可以节约很多时间。此外,有一些属性的属性值没有是有条件的。比如,Node.Width和Node.Height属性使用户控制特定节点的大小,但是可以通过设置Width和Height属性为100像素,你就使得控制的大小为100*100像素大小。如果没有设置属性值的话,有些属性可以自己决定自己的大小。比如,Image可以基于显示图片的大小来决定自己的大小,或者Stack Layout节点可以定义它管理所有节点的大小。

    属性优先级

    当系统去查询一个属性时候,会得到一个结果,但是属性系统如何去评估多个影响源来确定最终属性值的方法影响了属性值。这些影响源的评估是按照一个特定的顺序来的。kanzi engine基于以下优先级来决定运行时候的属性值(开始的最高):

  • 动画和状态管理系统。动画会动态修改属性值,状态机制会更具状态不同重写属性值。
  • 本地值。本地值是你直接设置的属性值。在 Kanzi Studio 节点所有的属性都通过本地值来定义的。你可以通过使用 actions, bindings, Kanzi Engine API, and scripting来进行指定。 如果使用Kanzi Engine API ,你可以通过setProperty()方法来设置本地值。比如设置节点的Visible属性为false, node.setProperty(Node::VisibleProperty,false)。不过大多数类提供的辅助函数来获取这些属性。比如,你可以通过node.setVisible()函数来设置Node.Visible 属性。
  • Named 风格. Kanzi applies a named style to all nodes whose Style property value points to that style.
  • Typed 风格. Kanzi applies a typed style to all nodes of the type you specify in the style.
  • 继承的值(如果属性是可继承的)。每个属性都指定了它是否可继承的。但是只有特定的值可以从父类继承。比如, Node.Font 就是一个可继承的属性。如果你想所有文本都使用一样的字体, 你只要在你的scene graph最顶层指定 Font 属性为某一特定字体类型,那么kanzi就会对后代所有节点使用这同一种字体类型。
  • 元数据属性类型的默认值。如果没有其它的影响,所有的属性都有它的默认值。但是每个继承属性类型的类都可能会重写它的默认值。比如, Node.HorizontalAlignment 和 Node.VerticalAlignment 属性的默认值是 HorizontalAlignmentCenter 和 VerticalAlignmentCenter。但是 Node2D 重写了这两个属性默认值为HorizontalAlignmentLeftVerticalAlignmentTop

    自定义属性

    现在先来看一下如何在kanzi studio中自定义属性。在Library导航条下,在Property Types上右击,选择Create->Property Type,然后就会出现如下图:

    Naming分组中:

  • Name 去设置属性在kanzi api中使用的名称。注意,该名称中不能包含空格。
  • Display Name 去设置属性在kanzi studio中使用的名称。输入 <Name> 会使用和 Name 属性一样的名称。
  • Category 去设置你的属性在 Properties 和 Add Properties 窗口所在的分组。使用该属性可以帮助你在kanzi studio中快速的找到你的属性。

    Type分组中:设置你自定义的属性所代表数据的类型,可以使用上面提到的属性类型。

    Type Specific分组中:你可以设置你自定义属性的最大值和最小值。如果你使用滑条来表示属性值,你可以设置滑条的步进值。

    Value分组中:你可以设置自定义属性的默认值和sorting index。

    最后点击Save,你就可以像添加其他属性一样来添加它了,如下图,我自定义了一个testtype属性:

    下节就主要看看如何通过Kaniz engine去查找相应节点,修改属性,绑定属性等。

Kanzi学习之路(4):Kanzi的属性系统相关推荐

  1. Kanzi学习之路(1):Kanzi的简介和安装

    2016年底的时候,写了一篇kanzi学习之路的序,http://blog.csdn.net/u010977122/article/details/53791660 ,希望感兴趣的猿友or媛友一起加入 ...

  2. kanzi学习之路(序)

    凤凰科技讯 北京时间2016年12月19日消息,据外媒报道,中国移动操作系统公司中科创达软件股份有限公司在周一宣布,已同意以6400万欧元(约合6700万美元)收购芬兰汽车软件公司Rightware. ...

  3. Kanzi学习之路(2):Hello world!

    安装了kanzi之后,今天我们先来写一个简单的Hello World程序,了解kanzi开发的一个大体流程,从UI设计师用kanzi studio开发,到到处kzb资源文件,再 到软件工程师用vs开发 ...

  4. Kanzi学习之路(3):Kanzi的树形结构和常用控件介绍

    今天我们来通过kanzi studio,感性的了解一下kanzi App的结构和一些常用的控件. 首先我们先新建一个工程,lesson3,通过前面的学习,对于kanzi studio的交互界面有了初步 ...

  5. Kanzi学习之路(7):kanzi的资源预加载

    为了便于资源文件的管理,kanzi有着一套自己的资源文件管理系统,将所有的资源文件打包进.kzb文件中.但是资源文件又很庞大,为了加快开机速度,应用程序的响应速度,很多时候我们要选择预加载资源,多线程 ...

  6. Kanzi学习教程培训教程-Kanzi的简介和安装

    如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额1元起步,多少随意 锋影 e-mail:174176320@qq.com Kanzi UI Solution是一个完整的UI ...

  7. Kanzi学习之路(6):属性绑定

    在设计中我们会经常遇到要让节点的属性跟随其他节点属性的值一起变化,这个时候我们可以使用kanzi里的绑定实现. 通过绑定,我们可以实现根据其他节点的属性和属性分量来刷新一个节点的属性和属性分量.绑定能 ...

  8. Vue学习之路(8)------快餐店收银系统

    转载:http://jspang.com 第1节:Mockplus把我们的想法画出来 第2节:Vue-cli搭建开发环境 第3节:搞定项目图标Iconfont 第4节:编写独立的侧边栏导航组件 第5节 ...

  9. 软件测试学习之路-----DOS命令与Linux系统笔记

    前言:软件测试为什么要学习DOS命令与Linux系统呢?这个问题,咱们来这么想.软件测试,是不是只要有个软件就行?那肯定不是,没了计算机啥都白瞎.然后现在人用的计算机通常都是Windows系统.那有W ...

最新文章

  1. 鱼眼相机标定_鱼眼相机模型(二)
  2. VTK:绕线旋转用法实战
  3. sales organization mapping logic debug
  4. 用指针实现高低位倒序,疯了吧
  5. 【计算机网络】周知端口号列表
  6. 接口测试要测试什么?
  7. java求解一给定数字的二进制表达中的1的个数
  8. mybatis 实现批量更新
  9. goole服务框架Android ID,GSF ID KEY(谷歌服務框架ID)作爲Android設備唯一標識符
  10. 叶雕——叹为观止的艺术!
  11. GIS中墨卡托与WGS 84的瓦片编号计算方法
  12. [Swift]LeetCode1031. 两个非重叠子数组的最大和 | Maximum Sum of Two Non-Overlapping Subarrays...
  13. #日常---恒权码与变权码
  14. 【LeetCode】灯泡开关Ⅰ~ Ⅳ(你还是把我关了吧)
  15. 服务器主板准系统怎么拆,主板准系统及电源装箱步骤完成_技嘉 GA-B85M-D3V_主板评测-中关村在线...
  16. 一个更好的可视化微服务架构的方式
  17. 批量修改AD账号Account
  18. 音响店VCD零售/出租系统(软件定义)
  19. windows系统软件卸载方法
  20. pr视频两边模糊_视频两边的这个虚化是怎么做出来的?

热门文章

  1. 如何下载OpenJDK安装版本
  2. springMVC 面试题整理
  3. 用JAVA制作抓老鹰游戏_Java制作最难练手速游戏,Faker都坚持不了一分钟
  4. c语言程序设计工作任务,C语言程序设计任务驱动教程
  5. Python学习:简单的python “hello,world”程序
  6. Java微信支付API文档测试
  7. ar和nm命令的使用
  8. C/C++框架和第三方库
  9. 华硕ROG|玩家国度 魔霸7Plus G713PV win11原厂系统 带ASUS Recovery
  10. 小程序scroll-view,滚动到最低_小程序滚动到底部